web-dev-qa-db-ja.com

デュアルスクリーンセットアップでのGnome Image Viewerのスクリプト

Eye of gnomeコマンドを使用して、画像ビューアの2つのインスタンスを2つの別々のディスプレイで開こうとしています。問題は、次のコマンドを使用した場合です。

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

それはディスプレイを開くことができないと述べています(私の仮定はそれがXディスプレイを参照しているということです)。各画面で1つのインスタンスを開く方法はありますか?

1
WxPilot

ここには2つの問題があります。

  1. eogの2つの個別のインスタンス(または少なくともウィンドウ)がある
  2. どの画面で開くかを制御する

最初のものは単純です:オプション--new-instanceがトリックを行います。

Scondはもっと複雑です。 --display引数は、使用するXサーバーを指し、画面やモニター(xorg.confの用語)の名前ではありません。したがって、--displayを使用するのは適切ではありません。

端末でeog --fullscreen image.jpgを発行すると、端末と同じ画面で画像が開きます。したがって、Gtkに正確な画面で開くように指示する方法があると思います。 (注:オプション-sはスライドショー用です。つまり、1つの画像が必要な場合は、フルスクリーンを優先します。)

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')がデスクトップに存在する場合は機能しないことに注意してください。

3
Rémi