Сценарии Gnome Image Viewer в двухэкранной настройке

Я пытаюсь использовать команду eye of gnome, чтобы открыть два экземпляра средства просмотра изображений на двух отдельных дисплеях. Беда в том, если я использую команду:

eog -s --display=DVI-0 image.jpg

он заявляет, что не может открыть дисплей (я предполагаю, что он имеет в виду X-дисплеи). Есть ли способ открыть по одному экземпляру на каждом экране?

1 ответ

Решение

Здесь есть две проблемы:

  1. имея два отдельных экземпляра (или, по крайней мере, окна) eog
  2. контролировать на каком экране они открываются

Первый прост: опция --new-instance сделать трюк.

Сконд один сложнее. Аргумент --display относится к используемому X-серверу, а не к имени экрана и / или монитора (терминология xorg.conf). Так что --display - неправильное решение для использования.

При выдаче eog --fullscreen image.jpg на терминале изображение открывается на том же экране, что и на терминале. Поэтому я полагаю, что есть способ указать Gtk, что он открывается на точном экране. (Примечание: опция -s предназначена для слайд-шоу, т. Е. Если вам нужно одно изображение, предпочтите полноэкранный режим.)

Из документации GTK/Gdk и исходного кода eog кажется, что eog создает всплывающее окно с изображением и запрашивает gdk, чтобы установить его в полноэкранном режиме. Затем Gdk просит оконный менеджер установить "окно" всплывающего полноэкранного режима. Поэтому решение об открытии изображения на том или ином экране принадлежит оконному менеджеру.

wmctrl кажется, правильный инструмент для общения с оконным менеджером. Вот черновик сценария, который делает это.

#!/bin/bash
#open two fullscreen windows
eog --fullscreen --new-instance image1.jpg&
#wait until windows are actually created
while [ 1 ]; do 
   found=$(wmctrl -l |grep 'image1.jpg'); 
   if ! [[ -z "$found" ]]; then 
      break; 
   fi; 
done;
#move first win to the left
wmctrl -r 'image1.jpg' -e 1,0,0,-1,-1

eog --fullscreen --new-instance image2.jpg&
#wait
while [ 1 ]; do 
   found=$(wmctrl -l |grep 'image2.jpg'); 
   if ! [[ -z "$found" ]]; then 
      break; 
   fi; 
done;
#move
wmctrl -r 'image2.jpg' -e 1,1280,0,-1,-1

Но вы должны заменить 1280 с вашей фактической шириной экрана. Также обратите внимание, что, поскольку сценарий использует имена окон для их идентификации, это не будет работать, если на вашем рабочем столе есть окна с похожими именами ('image1', 'image2').

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