Scripting
檢索剛剛啟動的 GUI 程序的 X11 視窗 ID
我想檢索我在後台啟動的 GUI 程序的 X id,以便處理它們的 Windows 屬性。到目前為止,我一直在使用這種解決方法:
myprogram & sleep 1 winID=$(wmctrl -l | awk '/./{line=$0} END{print $1;}')
但這依賴於三個重要的假設:
- 該程序將花費不到 1 秒的時間來打開它的視窗(更不用說 1 秒可能太長了)
wmctrl
視窗將出現在列表的末尾- 同時不會打開其他視窗
myprogram
打開視窗後是否會發送任何信號?我怎樣才能攔截它?
為了在我的程序中獲取 Window ID,我讓程序將標題設置為唯一的,然後讓程序啟動
wmctrl
並解析其輸出(而不是啟動程序的 shell 腳本),然後報告 Window ID(大多數通常通過文件)。由於程序在視窗打開之前不會繼續執行,因此您永遠不必等待很長時間。
這當然要求您可以更改
myprogram
(即從原始碼編譯)。