Script do Gnome Image Viewer em uma configuração de tela dupla

1

Estou tentando usar o comando eye of gnome para abrir duas instâncias do visualizador de imagens em duas exibições separadas. O problema é, se eu usar o comando:

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

ele afirma que não pode abrir a tela (minha suposição é que ela está se referindo a displays X). Existe uma maneira de ter uma instância aberta em cada tela?

    
por WxPilot 28.05.2014 / 15:26

1 resposta

3

Há dois problemas aqui:

  1. com duas instâncias separadas (ou pelo menos janelas) de eog
  2. controlando em qual tela eles abrem

O primeiro é simples: a opção --new-instance faz o truque.

O primeiro é mais complicado. O argumento --display refere-se ao servidor X para usar, não ao nome da tela e / ou monitor (terminologia xorg.conf). Então - não é o correto pensar em usar.

Ao emitir eog --fullscreen image.jpg em um terminal, a imagem é aberta na mesma tela que o terminal. Então eu suponho que há uma maneira de dizer ao Gtk para abrir em uma tela precisa. (NB: a opção -s é para apresentação de slides, ou seja, se você quiser uma única imagem, prefira tela inteira).

A partir da documentação do GTK / Gdk, e do código-fonte do eog, parece que o eog cria um popup com a imagem, e pede ao gdk para configurá-lo em tela cheia. O Gdk então solicita ao gerenciador de janelas para definir a "janela" do popup fullscreen. Portanto, a decisão de abrir a imagem nesta ou naquela tela pertence ao gerenciador de janelas.

wmctrl parece ser a ferramenta certa para se comunicar com o gerenciador de janelas. Aqui está um rascunho de um script fazendo isso.

#!/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

Mas você deve substituir 1280 com a largura real da tela. Observe também que, como o script usa nomes de janelas para identificá-los, isso não funcionará se houver janelas com nomes semelhantes ('image1', 'image2') em sua área de trabalho.

    
por Rémi 28.05.2014 / 16:31