Как измерить размеры экрана без использования линейки?

Лучший способ и независимая версия ubuntu - запустить dconf-editor и найти (ctrl + F) эту строку «systray-whitelist» (если они не изменят ее ...)

Вы можете отредактируйте его значение просто ['all'], вы можете восстановить его, нажав кнопку «установить по умолчанию».

Или узнайте, какие значки вы хотите показывать, один за другим и добавьте их там.

1
задан 13 April 2017 в 15:24

2 ответа

Как это работает

В приведенном ниже сценарии измеряется размер области между двумя точками указателя мыши.

Он работает следующим образом:

Поместите указатель мыши в первую позицию (без нажатия). Нажмите комбинацию клавиш по вашему выбору (см. Ниже). Поместите мышь во вторую позицию (снова без нажатия). Повторно нажмите комбинацию клавиш. Уведомление сообщит вам точный размер (px) области.

Опции

Вы можете выбрать (раскомментируя одну из строк), как вы хотите получать уведомления; либо путем уведомления:

Или информационное окно Zenity:

enter image description here

(Примеры из разных областей)

Как использовать

Поместите указатель мыши в первую позицию (без нажатия)

Поместите указатель мыши в первый (без нажатия)

command = ['notify-send', 'Area size', str(w)+' x '+str(h)]
(для уведомления с помощью опции notify-send)

command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]
для опции Zenity. Нажмите комбинацию клавиш по вашему выбору (см. ниже)

Нажмите комбинацию клавиш по вашему выбору (см. ниже)

measure_area

Примечания [ ! d40] Вам нужно будет выйти / вначале. Не имеет значения, что вы делаете в качестве первой / второй позиции; сценарий измеряет абсолютные значения.

Сценарий

#!/usr/bin/env python3
import subprocess
import os
import math

home = os.environ["HOME"]
area = home+"/"+".measure_area.txt"

def get_pos():
    pos_data = subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8")
    return [m[2:] for m in pos_data.split()[:2]]

def confirm():
    get = subprocess.check_output(["xrandr", "--verbose"]).decode("utf-8").split()
    for s in [get[i-1] for i in range(len(get)) if get[i] == "connected"]:
        br_data = float(get[get.index("Brightness:")+1])
        brightness = lambda br: ["xrandr", "--output", s, "--brightness", br]
        flash = ["sleep", "0.1"]
        for cmd in [brightness(str(br_data-0.1)), flash, brightness(str(br_data))]:
            subprocess.call(cmd)

if not os.path.exists(area):
    with open(area, "wt") as measure:
        measure.write(str(get_pos()))
    confirm()
else:
    second = get_pos()
    with open(area) as first_m:
        try:
            first = eval(first_m.read())
            w = int(math.fabs(int(second[0]) - int(first[0])))
            h = int(math.fabs(int(second[1]) - int(first[1])))
            #--- uncomment either one of the lines below:
            # command = ['notify-send', 'Area size', str(w)+' x '+str(h)]
            command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]
            #---
            confirm()
        except SyntaxError:
            text = "Please try again, there was an error in the data"
            command = ['zenity', '--info', '--title', 'Please try again', '--text', text]
        subprocess.Popen(command)
    os.remove(area)

Объяснение

Скопируйте сценарий ниже в пустой файл, раскомментируйте одну из строк:

xdotool getmouselocation

или:

Изменить

Добавить комбинацию клавиш для запуска скрипта: Выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команду:

Вам нужно будет выйти / в первый раз . Добавлена ​​процедура ремонта в случае, если что-то пошло не так с файлом первой информации (например, если пользователь сначала попытался запустить скрипт, не установив xdotool) Не имеет значения, что вы делаете в качестве первой / второй позиции; сценарий измеряет абсолютные значения.
41
ответ дан 23 May 2018 в 23:23
  • 1
    Потрясающие! Пробовал это сейчас, прекрасно работает! Спасибо! Вы действительно заслуживаете медали! – dayuloli 10 February 2015 в 14:51
  • 2
    @dayuloli Спасибо за вопрос! Я люблю делать такие вещи. – Jacob Vlijm 10 February 2015 в 14:52
  • 3
    Ницца! +1. Любопытно: почему Popen(['/bin/bash',... вместо Popen(['zenity', '--info', ...? – muru 10 February 2015 в 14:59
  • 4
    Возиться с цитатами? O.o command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]; subprocess.Popen(command) требует гораздо меньше возиться с ' и ", я думаю. – muru 10 February 2015 в 15:21
  • 5
    Могут ли быть сделаны те же изменения для xdotools? Что-то вроде check_output(['xdotools', 'getmouseposition'])? – Holloway 10 February 2015 в 17:55

Использование slop

Еще один простой способ определения области выбора - использовать slop (Select Operation), утилиту командной строки, которая запрашивает выбор у пользователя и печатает region to stdout. "

slop - это сравнительно новый инструмент и еще не упакован для Debian / Ubuntu. В его нынешнем виде вам придется скомпилировать его из источника:

sudo apt-get install build-essential cmake libxext-dev
git clone https://github.com/naelstrof/slop.git
cd slop
cmake ./
make && sudo make install

Установка является самой сложной частью. slop на самом деле очень легко работать. Например, следующий однострочный запрос предложит вам выбрать область экрана и отобразит результат как уведомление и напишет его в буфер обмена:

eval $(slop -t 0 -b 1) && notify-send  "Selection info" "Area: ${W} x ${Y}px \n Position: X = ${X}px, Y = ${Y}px" && echo ${W}x${H} | xsel -bi

Снимок экрана:

[d7 ]

Быстрое разбиение используемых команд:

slop -t 0 -b 1 - предложит пользователю выбрать область экрана; не выбирайте полные окна (-t 0), установите границу выделения на 1px (-b 1) eval $(...) - прочитайте вывод slop в переменные notify-send ... - отправьте уведомление GUI с информацией о выбранной области echo ${W}x${H} | xsel -bi - скопируйте размеры в буфер обмена (требуется xsel → sudo apt-get install xsel)
2
ответ дан 23 May 2018 в 23:23

Другие вопросы по тегам:

Похожие вопросы: