francisco@Ubuntu:~$ wmctrl -l
0x02600006 0 Ubuntu Área de trabalho
0x03c00002 0 Ubuntu XdndCollectionWindowImp
0x03c00005 0 Ubuntu unity-launcher
0x03c00008 0 Ubuntu unity-panel
0x03c0000b 0 Ubuntu unity-dash
0x03c0000c 0 Ubuntu Hud
0x046000b3 0 Ubuntu How to make a window aways on top? - Stack Overflow - Mozilla Firefox
0x0520000b 0 N/A Qt Creator
0x05002396 0 Ubuntu francisco@Ubuntu: ~
0x0540000b 0 N/A backlight
マシン名列がN/A
であるウィンドウの場合、wmctrl -r "window name" -b add,above
のようなwmctrl
コマンドを送信できません。どうして? (また、これらのウィンドウがマシン名列に関して異なる理由を私は知りません...)
私の最初の意図は、そのようなコマンドをフレームレスQtアプリケーションであるbacklight
ウィンドウに送信することでした。ただし、ウィンドウシステムメニューを使用し、「常に上に表示」をチェックすると、ウィンドウが機能します。同じことをするプログラム的な手段が好きです。
間違いなくwmctrl
のバグです。
wmctrlコードを掘り下げた後、バグはウィンドウ名文字列を対応するウィンドウID(またはXID)に変換しているようです。 wmctrl -r "window name" -b add,above
は信頼できません。
回避策として、代わりにXID、つまりwmctrl -i -r window_id -b add,above
を使用します。あなたの場合、wmctrl -i -r 0x0520000b -b add,above
は動作するはずです。
ほとんどのウィンドウ管理機能は、Xウィンドウプロパティとして実装されます。コマンド-- xprop
によってウィンドウのすべてのプロパティを表示できます。
注:
マシン名列がN/Aであるウィンドウ。マシン名のプロパティはWM_CLIENT_MACHINE
です。めったに使用されません。また、一部のGUIツールキットはそれらを実装しない場合があります。
次のコマンドラインを実行してウィンドウをクリックすると、ウィンドウのマシン名プロパティを表示できます。
Shell> xprop | grep MACHINE
Always On Topに関しては、別のプロパティ値_NET_WM_STATE_ABOVE
です。
自分で確認するには、次のコマンドラインを実行してウィンドウをクリックします
Shell> xprop | grep _NET_WM_STATE