マルチモニターでは、これまでウィンドウを手動でドラッグしてきました。デュアルヘッド設定で特定の画面でウィンドウを開く方法はありますか? (複数のXサーバーディスプレイと混同しないでください。)
何かのようなもの: SCREEN=2 firefox
またはopen-in-screen 2 firefox
。
それが重要であれば、私の環境はKWinウィンドウマネージャを使用するKDEです。 KWinウィンドウルールはタイトルなどの一部のプロパティにのみ一致できますが、フィルターとして環境変数を見つけることができませんでした。
セカンダリディスプレイはプライマリ画面を拡張します。
$ xrandr -q
Screen 0: minimum 320 x 200, current 3520 x 1080, maximum 32767 x 32767
LVDS1 connected 1600x900+0+0 (normal left inverted right x axis y axis) 382mm x 214mm
1600x900 60.1*+
1024x768 60.0
800x600 60.3 56.2
640x480 59.9
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 connected 1920x1080+1600+0 (normal left inverted right x axis y axis) 477mm x 268mm
1920x1080 60.0* 50.0 59.9
1920x1080i 60.1 50.0 60.0
1680x1050 59.9
1280x1024 75.0 60.0
1440x900 59.9
1280x960 60.0
1280x720 60.0 50.0 59.9
1024x768 75.1 70.1 60.0
832x624 74.6
800x600 72.2 75.0 60.3 56.2
720x576 50.0
720x480 60.0 59.9
640x480 75.0 72.8 66.7 60.0 59.9
720x400 70.1
DP1 disconnected (normal left inverted right x axis y axis)
いいえ、直接行うことはできません。 Xアーキテクチャーでは、表示される2つの物理モニターはアプリケーションからは認識できません。この抽象化を回避するには、可視ワークスペースのどの領域がどのモニターに対応するかを判別し、ウィンドウを正しいオフセットに配置する必要があります。
賢明なツールキットは-geometry
オプションをサポートしています。これにより、アプリケーションは特定の位置に配置することをリクエストできます。このオプションが利用できない場合、EWMH/NetWM互換のXウィンドウマネージャーがあればwmctrl
を使用して、既存のウィンドウを移動およびサイズ変更できます(wmctrl(1)を参照)、オプション-r
および-e
)。私はdevilspie
を使用していくつかのウィンドウの配置を強制します。もちろん、選択したウィンドウマネージャーにはウィンドウの配置を強制する独自の機能があります。
devilspie
を使用すると、Xウィンドウに特定のアクションを適用したり、Xウィンドウのプロパティを使用してさまざまなウィンドウやアプリケーションを識別したりできます。あなたにとって重要なルールはgeometry "<width>x<height>+<xoffset>+<yoffset>"
です。
ただし、別の物理モニターが自分自身をいつ、どこで開始するかを常に計算する必要があります。しかし、これはそれほど難しくありません。xrandr
は、出力名で始まる各行で"<width>x<height>+<xoffset>+<yoffset>
の形式でモニターを使用する方法と場所を示します。
実装が変わる可能性があるので(そしてそうします!)、間違いなく機能する方法はありません。 wmctrl
は通常、ウィンドウタイトルで機能し、ターゲットを識別します。 devilspie
もそのクラスを参照できますが、Xウィンドウクラスを指定して、そのジオメトリを指定できないツールキットについては知りません。
もちろん、常に2つのxephyr
インスタンスを開始して、左側の画面と右側の画面を塗りつぶし、DISPLAY
環境変数を介して画面のアドレスを指定することもできますが、このソリューションには他の欠点もあります。
理論的には、ウィンドウの配置を管理する権限はウィンドウマネージャーです。したがって、ウィンドウマネージャーができないことをしたい場合は、ハックになり、これを実現する一般的な方法がない理由にもなります。
ただし、具体的なユースケースがAndroidエミュレーター...である場合、シェルでSCREEN=n fooapp
を指定するオプションを要求することとは大きく異なり、devilspie
ヒント:アプリケーションをウィンドウクラスで識別するのが最善であることがわかりました。
これはウィンドウマネージャー固有のソリューションです。これは、KDEのデフォルトのウィンドウマネージャーであるkwinでそれを行う方法です。
アプリケーションのタイトルバーを右クリックして、[その他の設定]-> [特別なアプリケーション設定]を選択した場合。
[ウィンドウマッチング]タブに移動します。 [ウィンドウプロパティの検出]ボタンをクリックします。次に、マウスカーソルでアプリケーションのメインウィンドウをクリックします。ウィンドウクラスなどを選択し、ウィンドウの位置情報なども取得します。
次に、[サイズと位置]タブをクリックします。 [ボックスの位置]と[ボックスのサイズ]をクリックし、両方の右側にあるドロップダウンボックスをクリックして、記憶するように設定します。
次に[OK]をクリックします。
次回アプリを実行するときは、同じサイズで同じモニター上にある必要があります。
私はこれをKDEで使用して、3モニター構成で左モニターのuRxvt端末を開き、毎回動作します。
幸運を。
これは、デュアルモニターのセットアップ方法によって異なります。
XINERAMAを使用して両方のディスプレイをXのように見せている場合は、-geometry
オプションを使用して、特定の場所に表示されるようにアプリケーションに要求します。ディスプレイを別の画面として設定している場合は、DISPLAY
を使用してこれを実現します。
これらを試してみてください:
$ DISPLAY=0.0 xterm &
$ DISPLAY=0.1 xterm &
モニターが画面0と1の場合、これにより各モニターにxtermが生成されます。
xdotool
、xprop
、&wmctrl
を使用するこのメソッドに出くわしました。
以下のスクリプトが行うことは次のとおりです。
これにより、アクティブなウィンドウが他のモニターに移動します。並べてしか扱えません。水平、モニターの構成。
wid=`xdotool getactivewindow`
max_state=`xprop -id $wid _NET_WM_STATE`
wmctrl -ir $wid -b remove,maximized_vert,maximized_horz
eval `xdotool getwindowgeometry --Shell $wid`
new_x=1600
if [[ "$X" -ge "$new_x" ]]; then
new_x=0
fi
xdotool windowmove $wid $new_x $Y
if [ -z "${max_state/*_NET_WM_STATE_MAXIMIZED_*/}" ]; then
wmctrl -ir $wid -b add,maximized_vert,maximized_horz
fi
xdotool windowraise $wid
同様の問題がありました。以下が見つかりました:
他のデフォルトが指定されていない場合、ウィンドウは現在アクティブな画面に表示されます。上記の手順で、マウスの位置がこのアクティブな画面を定義します。