18

答えを探すのが難しい質問があります (常にモニター操作の答えになってしまいます)。コード開発に役立つ bash シェル スクリプトを作成しており、2 つのモニターを使用しています。

コンパイルした実行可能ファイルを実行するときに、特定のモニターで実行するように指示したいと思います (つまり、ターミナルを開いているモニターとは異なるため、ある画面でデバッグを表示し、別の画面でアプリを実行できます)。

どうすればこれを行うことができますか?何かのようなもの:

./myProject > but run on monitor 2

myProject私のバイナリ実行可能ファイルはどこにありますか。

皆さんありがとう。

4

5 に答える 5

9

各モニターで別々のディスプレイを実行する場合 (最近はあまりありません)、DISPLAY環境変数が必要です。

ただし、Xinerama (1 つの論理ディスプレイを複数のモニターに分散) を使用する場合:

  • 余談: X11 語彙: 「ディスプレイ」とは、入力デバイスを備えた 1 つ以上の「画面」です。たとえば、キーボードとマウス、別名「シート」。「画面」は、1 つ以上の「モニター」に部分的または完全に表示される論理キャンバスです。1 つの「画面」に複数のモニターを使用する場合、各モニターにウィンドウを部分的に表示できますが、同じ X11DISPLAY識別子を共有します。これはシネラマと呼ばれます。DISPLAY形式はhost : display-number . screen-idであるため、たとえば、私の Xinerama セットアップでは、両方のモニターが、0からカウントアップされるディスプレイ番号の画面の一部です。0同じホストにログインしている各ユーザーと。「シート」は、異なるハードウェアを使用しているモニター + 入力の論理グループです。複数の「ディスプレイ」は、「仮想コンソール」切り替えを使用して発生する可能性があります。これは、Gnome と KDE が複数のユーザーが単一の「シート」マシンにサインインできるようにする方法です。

--geometryほとんどの GUI ツールキットでは、または-geometryスイッチを使用してウィンドウのジオメトリを指定できます。

  • Qt は古い MIT スタイルの-geometryフォームを使用します。GTK+/Gnome は GNU スタイルを使用します--geometry

  • これは、Qt がコマンドラインを後処理することを許可していることを前提としています。たとえば、に渡すargvなどQtApplicationです。

「論理ディスプレイ」には、モニターの配置の各方向の解像度の合計である解像度があります。たとえば、現在 2 × 1920×1080 ディスプレイを接続しています。xrandrレポート:

Screen 0: minimum 320 x 200, current 3840 x 1080, maximum 8192 x 8192

右側のモニターにウィンドウを表示するには、x座標が 1920 ~ 3839 (両端を含む) のジオメトリ文字列を指定します。

通常のフォーマットは次のとおりです: width x height ± x-offset ± y-offset — ただし、デフォルトを使用したい場合は、幅と高さはオプションです。は±+上/左-に対して相対的にカウントするか、下/右に対して相対的にカウントします。

たとえば、次のようになります。

gedit --geometry 800x600+1920+0  # set size at top-left of right screen
gedit --geometry +1920+100       # default size at top-left of right screen
gedit --geometry -0+0            # default size at top-right of entire display

残念ながら、シェルから各モニターのディスプレイの領域を決定するために私が知っているプログラムによる唯一の方法は、からの出力を解析することxrandrです。例えば

$ xrandr
Screen 0: minimum 320 x 200, current 3840 x 1080, maximum 8192 x 8192
LVDS1 connected (normal left inverted right x axis y axis)
   1366x768       60.0 +
   1024x768       60.0  
   800x600        60.3     56.2  
   640x480        59.9  
VGA1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 510mm x 287mm
   1920x1080      60.0*+
   1680x1050      60.0  
   1280x1024      60.0  
   1440x900       59.9  
   1280x720       60.0  
   1024x768       60.0  
   800x600        60.3  
   640x480        60.0  
   720x400        70.1  
HDMI1 connected 1920x1080+1920+0 (normal left inverted right x axis y axis) 510mm x 287mm
   1920x1080      60.0*+
   1680x1050      59.9  
   1280x1024      60.0  
   1440x900       59.9  
   1280x720       60.0  
   1024x768       60.0  
   800x600        60.3  
   640x480        60.0  
   720x400        70.1  
DP1 disconnected (normal left inverted right x axis y axis)

$ xrandr | perl -ne 'if (/(\d+)x(\d+)\+(\d+)\+(\d+)/) '\
> ' { print "$3,$4 - ", $3 + $1 - 1, ",", $4 + $2 - 1, "\n" }'
0,0 - 1919,1079
1920,0 - 3839,1079

(通常、シェルで Perl のワンライナーを 2 行に分割することは避けたいと思うでしょうが、'\そこにある …<code>' のトリックは、SO 上で読みやすくするためのものです。)

于 2013-08-21T17:15:53.723 に答える
7

上記の--geometry回答と受け入れられた回答は、多くの場合、単に機能しません...

このようなほぼ同一の質問が、さまざまな StackExchange サイトや AskUbuntu の周りに浮かんでいます。私が最終的に見つけた答え (Ubuntu 14.04 に基づく Linux Mint ディストリビューションで) は、wmctrl. このスレッドで誰も言及していないので、私は答えを残しています。

(別の電話番号がありDevil's Pie、別の電話Compiz番号も検索すると、私が話している Q&A が見つかります)

wmctrlは、Bash スクリプトを作成している場合におそらく探している単純な UNIX ツールの一種です。xdotoolまた、特定の目標が何であるかに応じて、誰かが を使用することを提案しているのを見ました。

wmctrlpidウィンドウ タイトルまたは(すべてのタイプの X 管理ウィンドウと互換性があるわけではありません)によるウィンドウ マッチングを提供します。

役立つリソース:

毎日どこで作業しているかに応じて、左側または右側に 2 台目のモニターを接続しています。

  • ( BRPocockの回答xrandrに示されているように)から寸法を見つける、
  • それを解析して、内蔵モニターではなく外部接続モニター (VGA/HDMI など) を判別します。
  • 接続された画面で最大化されたウィンドウに与える寸法の指定 (つまり、左/右/上/下のオフセット。使用されている画面の側面に応じて変化します)

私のメモと [最終的に]他の人に役立つ場合に備えて、ここで生成されたコードをいくつか残します。

于 2016-06-23T19:01:01.137 に答える
4

DISPLAYアプリケーションを実行する前に、環境変数を設定するだけです。

設定する必要があるものを見つけるには、表示するモニターで次を実行します。

echo $DISPLAY

たとえば:0.1、 またはが表示され:0.0ます。

次に、次のように、そのディスプレイでアプリを実行するように指定できます。

DISPLAY=:0.1 ./my_app
于 2013-08-21T15:59:57.607 に答える
4

使うfifo

出力を表示するモニターでターミナルウィンドウを開き、実行します

mkfifo /tmp/myfifo
cat /tmp/myfifo

次に、ソース端末で

./myProject >/tmp/myfifo

これは、コンソール アプリであることを前提としています。グラフィカルな場合は、別のアプローチが必要になります。これは、使用しているウィンドウ マネージャーとツールキットに依存します。

于 2013-08-21T14:48:43.590 に答える