2011-10-19 22 views
3

xwininfoを実行するとウィンドウIDが表示されますが、ターゲットウィンドウ上でマウスをクリックする必要があります。特定のIDを使用するようにウィンドウマネージャを強制する方法、または少なくともウィンドウマネージャに提案する方法はありますか?シェルからプログラムを起動するときにウィンドウIDを割り当てることは可能ですか?

gedit windowid=0x12345678


ような何かが、私はGitHubのにいくつかのファイルをアップロードした私は、この問題を回避するために管理方法を示す(hereまたはhereを参照してください)。あなたがそれらを見ると、あなたがしようとしていることに対してより良い気持ちを得るでしょう。

+0

実際にはIDを重要なものに設定していますか、特定のウィンドウのIDをクリックしなくてもそれを確認したいのですか? – Kristofer

+0

@クリストファー、おそらくBが正しいです。あなたは何をしますか?簡単ではない。 – TMS

+0

@Kristoferはい私は 'wmctrl'で移動できるようにウィンドウIDが必要ですが、ウィンドウマネージャーがウィンドウを起動する前にコマンド(つまり' gedit')が返ってくると思います。したがって、もしあなたが 'gedit; ps; wmctrl -l -p' geditのプロセスIDは 'ps'に表示されますが、' wmctrl -l -p'には表示されません – puk

答えて

1

いいえ、できません。ウィンドウIDは、XCreateWindow/XCreateSimpleWindowが呼び出されるときにXサーバによって与えられ、変更する方法はありません。ユーザにそれらを選択させることは非常に危険で間違いでしょう。ウィンドウを見つける場合は、XGetWindowPropertyおよびWM_CLASSプロパティと共にXQueryTree関数を使用してみてください。

+0

プロセスIDを取得してそれらを使用するには '$! '一度ロードするとウィンドウID。私は誰もこれを作ったと信じられない。プログラマーは、異なるプロジェクトにログインするたびに適切なワークスペースにロードされるたびにプログラマーが好きなように思えます。 – puk

+0

あなたは正しいですが、問題は、Xがワークスペースを直接サポートしていないことです。ワークスペースはプロトコルの一部として実装されているため、WMによってサポートされているものもあれば、そうでないものもあります。さらに、プロトコルは単なるインタフェースなので、異なるWMが異なる方法でワークスペースを処理できます。このようなツールを作成することは不可能ではありませんが、まずXの仕組みを理解する必要があります。この中でもっと深く知りたい場合は、ICCCMと拡張ICCCMを学んでください。とにかく、画面上にウィンドウを表示するプロセスが異なるマシン上で実行されている可能性があるため、PIDをウィンドウIDと照合する方法はありません! – AlQafir

+0

最後のヒントとして、使用しているWMが拡張ICCCMプロトコルをサポートしている場合、ウィンドウの_NET_WM_PIDプロパティを読み取ってPIDを見つけることができますが、WMによってサポートされていない場合、何もない。 – AlQafir

関連する問題