2010-11-24 107 views
10

你知道任何wmctrl的替代品嗎?一個程序,可讓您從命令行操作窗口和窗口管理。wmctrl有什麼替代方法?

wmctrl的一個缺點是,雖然您可以操縱當前窗口,但無法獲取wmctrl以列出有關當前窗口的信息(它忽略了-r)。

回答

9

你就可以欺騙wmctrl成通過打開詳細模式輸出活動窗口的ID號,並告訴它使用的參數無效移動活動窗口:

wmctrl -v -r :ACTIVE: -e dummy 

雖然這確實退出與錯誤狀態,它也輸出活動窗口的ID號:

envir_utf8: 1 
Using window: 0x08400004 
The -e option expects a list of comma separated integers: "gravity,X,Y,width,height" 

一旦你的活動窗口的ID號,你可以列出所有窗口,並搜索ID號:

wmctrl -l 

用wmctrl獲取有關活動窗口的信息很尷尬,但它是可能的。

+0

謝謝,不錯的把戲! – joeytwiddle 2011-11-21 23:31:20

+9

`wmctrl -a:ACTIVE:-v`也起作用,並具有爲您提供有意義退出代碼的輕微優勢。 – 2013-03-10 02:12:22

11

要查找當前活動窗口的ID,使用方法:

xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}" 

使用這個ID,你就可以得到很多信息,關於當前活動窗口:

xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") 

從那裏,你可以grep你需要什麼,或者使它顯示所需的領域與我上面提取相同的方式。所以,找到當前活動窗口的PID,你會追加-f _NET_WM_PID 0c " \$0\\n" _NET_WM_PID到上面的命令,使其:

xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") -f _NET_WM_PID 0c " \$0\\n" _NET_WM_PID | awk "{print \$2}" 

注意wmctrl也接受同種的ID與-i組合的標誌。

1

我在RH Linux 5.5和5.6 64位下的wmctrl版本1.07的經驗是 wmctrl有時會完全丟失。舉例來說,尋找一個Firefox窗口 以下回報沒事的時候:

% wmctrl -lpGx | grep -i 'Firefox' 

我懷疑是wmcntl找不到Firefox窗口由於窗口管理器的性質,在這種情況下,Metacity的。這位經理似乎重新啓動Windows,也許這會導致wmctrl不列出Firefox窗口。 'xwininfo'列出了Firefox的窗口。

如果您有機會獲得xdotool(我的版本是2.20110530.1),那麼你可以嘗試:

% mywin=`xwininfo -root -tree | awk '/- Mozilla Firefox/ { printf $1; exit}'` 
% xdotool windowactivate --sync $mywin mousemove --window $mywin 0 0 

這使得Firefox的活躍,使得它在桌面上的堆棧頂部窗口,並提出了將鼠標懸停在它上面(有時需要用戶的環境將焦點置於鼠標下的窗口而無需點擊。)如果你不想讓鼠標簡單地移動 從上面刪除'mousemove --window $ mywin 0 0'。

注意:在同一Linux系統上查找Konqueror窗口時遇到了同樣的問題。

1

窗口ID

wmctrl -a :ACTIVE: -v 2>&1 | grep "Using window: " | awk "{print \$3}" 
1

您可以檢查xdo它可以做一個體面的工作,以最小的ressources。

相關問題