https://unix.stackexchange.com/a/254854/674 および https://unix.stackexchange.com/questions/458895/how-can-i-に照らしてbring-a-background-gui-job-to-the-front-of-my-desktop 、xdotoolのマンページからの例があります
# Activate google-chrome when you move the mouse to the bottom-left corner:
xdotool behave_screen_Edge bottom-left search --class google-chrome windowactivate
マンページには
--classウィンドウクラスと一致します。
--classnameウィンドウのクラス名と一致します。
「クラス」と「クラス名」とは何ですか?
どのような価値がありますか?
ウィンドウのクラスとクラス名を調べるにはどうすればよいですか?
ありがとう。
X11では、ウィンドウには XWindowdAttributes構造体 および XClassHint構造体 プロパティがあり、そこからアプリケーションはウィンドウに関する情報を取得します。具体的には、最後の1つはWM_CLASS
プロパティである2つのコンマ区切りの文字列を担当し、xprop
コマンドで簡単に確認できます。たとえば、Chromeは
WM_CLASS(STRING) = "google-chrome", "Google-chrome"
これら2つは ドキュメント化された として:
- このウィンドウを所有するクライアントが属するアプリケーションの特定のインスタンスを指定する文字列。 ...
- このウィンドウを所有するクライアントが属するアプリケーションの一般クラスを指定する文字列。クラスによって指定されるリソースは、同じクラス名を持つすべてのアプリケーションに適用されます。..
したがって、たとえば、Chrome用のハングアウト拡張機能は同じクラス名ですが、インスタンス名は異なります。
$ xprop | grep 'CLASS'
WM_CLASS(STRING) = "crx_nckgahadagoaajjgafhacjanaoiihapd", "Google-chrome"
これにより、xdotool
などのツールを使用して、特定のアプリケーションタイプまたは特定のウィンドウインスタンスのすべてのウィンドウを検索できます。たとえば、これは、アプリケーションの同じアイコンの下にウィンドウをグループ化するドックなどの便利なプロパティにもなります。
特にxdotool
の場合、classname
は最初の文字列に対応し、class
は2番目の文字列に対応します。 Chromeとハングアウトアプリの例:
$ xdotool search -classname crx_nckgahadagoaajjgafhacjanaoiihapd
96469129
$ xdotool search -class Google-chrome
96469069
109051905
109051907
96468993
96469129
109051912
109051924
これは、ソースコードを見ると明らかです。たとえば、クラス名に注目しましょう。 cmd_search.c には、検索マスクプロパティ(行171〜173)を持つ検索構造が構築されています。
これは xdo_search.c で定義されたxdo_search_windows
関数に渡されます。この関数は check_window_match
を呼び出し、それが _ xdo_match_window_classname になり、最終的に終了します 両方の構造の取得 この回答の冒頭で標準 Xlib 関数で言及 XGetWindowAttributes および XGetClassHint .
サイドノート:Gtkアプリはどうやら 常に子ウィンドウを持つ小さな親ウィンドウを作成する です。これは、特定のウィンドウを検索するときに混乱を招く結果になる可能性があることを意味します。
class
は、実際にurxvt
とurxvt
(Unicode rxvt端末)の両方を含むrxvt
のようなものです。 classname
は、これらを実際の名前に分割します。以下に例を示します。
4つのrxvtターミナルウィンドウを開いています。
terrance-Linux:~$ xdotool search -class rxvt
130023435
127926283
125829131
132120587
terrance-Linux:~$ xdotool search -class urxvt
130023435
127926283
125829131
132120587
terrance-Linux:~$ xdotool search -classname urxvt
terrance-Linux:~$ xdotool search -classname rxvt
130023435
127926283
125829131
132120587
その後、urxvt
ターミナルを起動したとき、これが得られました。
terrance-Linux:~$ xdotool search -classname urxvt
140509193
xprop
アプリケーションを使用して、ウィンドウをクリックすると、WM_CLASS(STRING)
が表示されます。最初はclassname
で、2番目はclass
です。
例:
コマンドを実行し、RXVTターミナルウィンドウをクリックします。
terrance-Linux:~$ xprop | grep WM_CLASS
WM_CLASS(STRING) = "rxvt", "URxvt"
URXVTウィンドウをクリックする同じコマンド:
terrance-Linux:~$ xprop | grep WM_CLASS
WM_CLASS(STRING) = "urxvt", "URxvt"
Google Chromeブラウザーを再度クリックする同じコマンド:
terrance-Linux:~$ xprop | grep WM_CLASS
WM_CLASS(STRING) = "google-chrome", "Google-chrome"
xfce4-terminal
ウィンドウをクリックする:
terrance-Linux:~$ xprop | grep WM_CLASS
WM_CLASS(STRING) = "xfce4-terminal", "Xfce4-terminal"
gnome-terminal
ウィンドウをクリックする:
terrance-Linux:~$ xprop | grep WM_CLASS
WM_CLASS(STRING) = "gnome-terminal-server", "Gnome-terminal"
Firefoxウィンドウをクリックします(これは異なります)。
terrance-Linux:~$ xprop | grep WM_CLASS
WM_CLASS(STRING) = "Navigator", "Firefox"
これが違いにいくつかの光を広めるのに役立つことを願っています。