Инструмент командной строки для скриншота нескольких мониторов отдельно - PullRequest
2 голосов
/ 26 сентября 2019

Постановка проблемы

Я использую scrot для создания снимков экрана, что прекрасно работает, за исключением случаев, когда у меня несколько мониторов или дисплеев.В этом случае scrot объединяет снимки экрана различных мониторов в один выход.

На странице руководства scrot поддерживает параметр -m:

-m, --multidisp
        For multiple heads, grab shot from each and join them together.

Итак, я представилповедение по умолчанию будет НЕ соединить их вместе.Однако, это не так.Даже без опции -m я получаю объединенные снимки экрана.

Я надеюсь, что scrot сможет это сделать, поскольку он поддерживает параметр -u:

-u, --focused
        Use the currently focused window.

, которыйработает отлично.

Я также проверил другой инструмент CLI под названием maim - но опять же я не мог понять, как сделать снимок экрана различных мониторов отдельно.

Так что решение яисключение должно работать примерно так:

screenshot_command <display_name> # and other options

для скриншота только дисплея <display_name>.

Мои попытки решения пока

maim поддерживает параметр поиска курьезов -x:

-x, --xdisplay=hostname:number.screen_number
          Sets the xdisplay to use.

Поэтому я попытался maim -x 0.0 | xclip -selection clipboard -t image/png, но это не сработало.Я не знаю, как эта опция предназначена для использования, так как не хватает документации.

И scrot, и maim также поддерживает параметр -s:

-s, --select
        Interactively select a window or rectangle with the mouse.

Итак, я представляю себе очень уродливое / хакое решение, используя xdotool (или аналогичное) для выбора нужного дисплея и используя с опциями от -s до maim или scrot, возможно,работа.Но я бы предпочел не идти по этому пути, если нет другого прямого решения.

Дикие предположения

Интересно, может ли эта проблема быть из-за меня?добавление новых мониторов?Я обычно добавляю свой второй дисплей командой примерно так:

xrandr --output eDP-1 --auto --output HDMI-1-4 --auto --right-of eDP-1

Так что мне интересно, может быть, scrot или maim есть только один дисплей.И я так себе представляю, потому что вывод xdpyinfo | grep -A4 '^screen' с ONE монитором выглядит так:

$ xdpyinfo | grep -A4 '^screen'
screen #0:
  dimensions:    1920x1080 pixels (506x285 millimeters)
  resolution:    96x96 dots per inch
  depths (7):    24, 1, 4, 8, 15, 16, 32
  root window id:    0x1ba

и с двумя мониторами выглядит так:

$ xdpyinfo | grep -A4 '^screen'
screen #0:
  dimensions:    3280x1080 pixels (865x285 millimeters)
  resolution:    96x96 dots per inch
  depths (7):    24, 1, 4, 8, 15, 16, 32
  root window id:    0x1ba

Если это действительно является причиной моих проблем, то как мне добавить свой второй монитор?

1 Ответ

0 голосов
/ 28 сентября 2019

Другое решение - MSS .

Установка довольно проста (не требуется для дорогих модулей Python):

$ python3 -m pip install --user -U mss

Это добавит новый mssисполняемый файл, который вы можете вызвать в любое время.

Например, чтобы получить снимок экрана для каждого монитора, просто введите:

$ mss
/home/USER/monitor-1.png
/home/USER/monitor-2.png
/home/USER/monitor-3.png

Если вы хотите захватить только первый монитор:

$ mss --monitor 1
/home/USER/monitor-1.png

Чтобы сделать снимок экрана со всеми мониторами на одном изображении (как это делает мошенник):

$ mss --monitor -1
/home/USER/monitor-0.png

На данный момент справочный персонал показывает:

$ mss --help
usage: mss [-h] [-c COORDINATES] [-l {0,1,2,3,4,5,6,7,8,9}] [-m MONITOR]
           [-o OUTPUT] [-q] [-v]

optional arguments:
  -h, --help            show this help message and exit
  -c COORDINATES, --coordinates COORDINATES
                        the part of the screen to capture: top, left, width,
                        height
  -l {0,1,2,3,4,5,6,7,8,9}, --level {0,1,2,3,4,5,6,7,8,9}
                        the PNG compression level
  -m MONITOR, --monitor MONITOR
                        the monitor to screen shot
  -o OUTPUT, --output OUTPUT
                        the output file name
  -q, --quiet           do not print created files
  -v, --version         show program's version number and exit
...