別のモニターでウィンドウを開くにはどうすればよいですか?


9

マルチモニターでは、これまでウィンドウを手動でドラッグしてきました。デュアルヘッド設定で特定の画面でウィンドウを開く方法はありますか?(複数の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)

2
通常、kstartこれを使用することをお勧めしますがkstart、特定のデスクトップの定義のみをサポートし、アプリケーションを起動する画面はサポートしていないようです。おそらくbugs.kde.orgの WISHLIST バグレポートの価値があります。
エリアスプロブスト

についての素晴らしいヒントkstart、それも知りたかった。コマンドは次のとおりですkstart --desktop $N firefox$Nは、1から仮想デスクトップの総数までの数です。
Lekensteyn 2013

kstartに関しては、もありますバグ報告この機能を求めてbugs.kde.orgに。
エリアスプロブスト2014年

奇妙なことに、今日の初めにwmctrlに関する投稿を見ましたが、テストする機会がありませんでした。なぜ削除されたのですか?
Lekensteyn 2014年

wmctrlの投稿について何も知りませんでした。表示されませんでした。
エリアスプロブスト2014年

回答:


5

いいえ、直接行うことはできません。Xアーキテクチャでは、表示される2つの物理モニターはアプリケーションからは認識できません。この抽象化を回避するには、可視ワークスペースのどの領域がどのモニターに対応するかを判別し、ウィンドウを正しいオフセットに配置する必要があります。

賢明なツールキット-geometryは、アプリケーションが特定の位置に配置されることを要求できるオプションをサポートしています。このオプションを使用できwmctrlない場合は、EWMH / NetWM互換のXウィンドウマネージャーがある場合に使用して、既存のウィンドウを移動およびサイズ変更できます(wmctrl(1)を参照してください。オプション-rとが必要です-e)。devilspie一部のウィンドウを強制的に配置するために使用します。もちろん、選択したウィンドウマネージャーには、ウィンドウを強制的に配置する独自の機能があります。

devilspieXウィンドウに特定のアクションを適用でき、Xウィンドウのプロパティを使用してさまざまなウィンドウやアプリケーションを識別できます。あなたにとっての重要なルールはでしょうgeometry "<width>x<height>+<xoffset>+<yoffset>"

ただし、別の物理モニターが自分自身をいつ、どこで開始するかを常に計算する必要があります。しかし、これはそれほど難しくはなく、出力名で始まる各行xrandrの形式でモニターを使用する方法と場所を示します"<width>x<height>+<xoffset>+<yoffset>

実装は変わる可能性があるため(実際にそうです!)、間違いなく動作する方法はありません。wmctrl通常はウィンドウのタイトルを操作してターゲットを識別します。devilspieそのクラスを参照することもできますが、Xのウィンドウクラスを指定して、そのジオメトリを指定できないツールキットについては知りません。

もちろん、常に2つのxephyrインスタンスを起動し、1つを左画面に、もう1つを右画面にして、DISPLAY環境変数を介して画面をアドレス指定することもできますが、このソリューションには他の欠点もあります。

理論的には、ウィンドウの配置を管理する権限はウィンドウマネージャーです。したがって、ウィンドウマネージャーが実行できないことを実行したい場合は、ハックになり、これを実現する一般的な方法がない理由でもあります。

それでも、具体的なユースケースがAndroidエミュレーターである場合...これはSCREEN=n fooapp、シェルで指定するオプションを要求することとは大きく異なり、devilspie探しているものである可能性があります。ヒント:アプリケーションをウィンドウクラスで識別するのが最善であることがわかりました。


これが簡単な機能ではない理由を説明していただきありがとうございます。KWinには、別の画面への配置を強制するウィンドウルールもあります(これが現在使用しているものです)。にはデフォルトの機能はありませんがSCREEN=x app、この方法でウィンドウプロパティを追加して、KWinでフィルタリングできるようにすることはできますか?
Lekensteyn 2014年

理論的にはそうですが、これに対する既存の解​​決策は知りません。プロパティを追加することはできませんが、既存のプロパティを変更することはできるので、kwinが検出できるウィンドウクラスに文字列を追加するだけです。
Bananguin 2014年

あなたの回答が問題をよりよく説明している間、SEは他の方法でトップ投票の回答にそれを与えるので、私はあなたに賞金を授与しました。現在の答えはまだ満足のいくものではありません。
Lekensteyn 14年

4

これはウィンドウマネージャー固有のソリューションです。これは、KDEのデフォルトのウィンドウマネージャーであるkwinでそれを行う方法です。

アプリケーションのタイトルバーを右クリックして、[その他の設定]-> [特別なアプリケーション設定]を選択した場合。

[ウィンドウマッチング]タブに移動します。[ウィンドウプロパティの検出]ボタンをクリックします。次に、マウスカーソルでアプリケーションのメインウィンドウをクリックします。ウィンドウクラスなどを選択し、ウィンドウの位置情報なども取得します。

次に、[サイズと位置]タブをクリックします。[ボックスの位置]と[ボックスのサイズ]をクリックし、両方の右側にあるドロップダウンボックスをクリックして、覚えておきます。

次に[OK]をクリックします。

次にアプリを実行するときは、同じサイズで同じモニター上にある必要があります。

私はこれをKDEで使用して、3モニター構成で左モニターのuRxvt端末を開き、毎回動作します。

幸運を。


これは私が今それを行う方法です、私はenvvarsを使用するより簡単な方法があることを望んでいました。
Lekensteyn 14年

これはKDE KWinユーザーにとって正しい答えです。
iLikeDirt 2018

3

これは、デュアルモニターの設定方法によって異なります。

XINERAMAを使用して両方のディスプレイを1つのXのように見せている場合は、-geometryオプションを使用して、アプリケーションに特定の場所に表示されるように要求します。ディスプレイを別の画面として設定している場合は、を使用しDISPLAYてこれを実現します。

これらを試してみてください:

$ DISPLAY=0.0 xterm &
$ DISPLAY=0.1 xterm &

モニターが画面0と1の場合、これにより各モニターにxtermが生成されます。


2
私はすでにこれを試しましたが、この構成は当てはまりません。ある画面が別の画面の左側に配置されています。質問を更新します。
Lekensteyn 2013

1
ジオメトリオプションをサポートするアプリに使用してみましたか?x座標を> 1600にすると、アプリは2番目のモニタースペースに配置されます。私の経験のkwinのように、kwin以外でも(それが機能するかどうかを確認するために)試すこともできますが、-geometry常に正しく機能するとは限りません。
ケーシー

Casey、私が配置しようとしているアプリケーションは、そのようなオプション(android emulator、QEMUに基づく)をサポートしていません。マウスカーソルが置かれている場所にプログラムが開きます。
Lekensteyn 2013

2

私は、を使用しています。この方法に遭遇しなかったxdotoolxpropと、wmctrl

以下のスクリプトは何をするかです:

  1. アクティブなウィンドウを見つける
  2. 最大化された状態を取得して覚えてください
  3. 最大化を削除
  4. ジオメトリを取得する
  5. 新しい位置を計算する
  6. それを移動
  7. 以前の状態に基づいて最大化
  8. 上げる
  9. これを行うスクリプトは次のとおりです。

脚本

これにより、アクティブなウィンドウが他のモニターに移動します。並べてしか扱えません。水平、モニターの構成。

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

出典: Xubuntu –モニター間でウィンドウを移動する


これはアプリケーションが開かれた後にのみ機能し、実際に私が探しているものではありません(ただし、おそらくこれにキーバインディングを追加できます)。私が間違っていない場合、これは常にウィンドウをモニターの左側に配置しますか?
Lekensteyn 2014年

@Lekensteyn-はい、このソリューションの目的は、appXを起動してから、このコマンドを実行して移動することです。私はデュアルモニター8-を持っていないので、これをテストする方法はありません。私はそれを見つけて、評価するための詳細をここに提供しました。これはオプションであり、適応できる可能性がありますが、それは「未加工」のソリューションです現在の形式
slm

@Lekensteyn-このソリューションはSCREEN=2 appX、それを除いて、あなたのコンセプトとそれほど変わらないappX; sleep 1; moveWindow.sh
slm

@Lekensteyn-また、(単一のウィンドウ内で)devilspie、xdotoolなどを使用してまったく同じことを行いましたが、このAは他の1つを補完します。実際の実装の詳細は表示されません。
slm

app & sleep 1; moveWindow.shプログラムがデタッチしないので、より似ています。ただし、これはKWinウィンドウルールを使用する場合よりも優れているとは言えません。あなたの努力のために+1。
Lekensteyn 2014年

0

同様の問題がありました。以下が見つかりました:

  1. ウィンドウのタイトルバーを右クリックして、[その他のアクション]-> [ウィンドウマネージャーの設定]を選択します。
  2. 左側の列で「フォーカス」を選択します。
  3. トグルオプション「マウスに続くアクティブスクリーン」。

他のデフォルトが指定されていない場合、ウィンドウは現在アクティブな画面に表示されます。上記の手順で、マウスの位置がこのアクティブな画面を定義します。


右ですが、現在の画面にカーソルを保持したい場合は機能しません。これはデフォルトのオプションでさえあると思いますが、すべてのプログラムがそれを尊重するわけではありません。
Lekensteyn 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.