PIDを持っていると仮定して、シェルスクリプトまたはターミナルコマンドを使用して、メインウィンドウ(フォーム)があるかどうかを判断し、それに関する情報(タイトル)を取得して表示/非表示/閉じることができますか?
コマンドラインに言及しているため、以下のスクリプトはターミナルウィンドウで実行されます。 pid
を引数として実行します。例:
python3 /path/to/script.py 1234
その後、ウィンドウ(リスト)が表示されます。このウィンドウで(リスト)番号を選択し、実行するオプションを入力できます。
Current Windows for pid 2189:
------------------------------------------------------------
[1] Niet-opgeslagen document 1 - gedit
[2] testbackup.py (~/Bureaublad) - gedit
------------------------------------------------------------
Type window number + option:
-k [kill (gracfully)]
-m [minimize]
-s [show]
Press <Enter> to cancel
------------------------------------------------------------
1 -k
ウィンドウがない場合:
There are no windows for pid 1234
#!/usr/bin/env python3
import subprocess
import sys
pid = sys.argv[1]
message = """
------------------------------------------------------------
Type window number + option:
-k [kill (gracfully)]
-m [minimize]
-s s[how]
<Enter> to cancel
------------------------------------------------------------
"""
# just a helper function
get = lambda cmd: subprocess.check_output(cmd).decode("utf-8").strip()
# get the window list
wlist = [l.split()[0] for l in get(["wmctrl", "-lp"]).splitlines() if pid in l]
# create a indexed list of window name, id
wdata = [[i+1, get(["xdotool", "getwindowname", w_id]), w_id] \
for i, w_id in enumerate(wlist)]
# if the list is not empty (windows exist)
if wdata:
# print the window list
print("\nCurrent Windows for pid "+pid+":\n"+"-"*60)
for item in wdata:
print("["+str(item[0])+"]", item[1])
# ask for user input (see "message" at the top)
action = input(message)
action = action.split()
# run the chosen action
try:
subj = [item[2] for item in wdata if item[0] == int(action[0])][0]
options = ["-k", "-m", "-s"]; option = options.index(action[1])
command = [
["wmctrl", "-ic", subj],
["xdotool", "windowminimize", subj],
["wmctrl", "-ia", subj],
][option]
subprocess.Popen(command)
except (IndexError, ValueError):
pass
else:
print("There are no windows for pid", pid)
スクリプトはxdotool
とwmctrl
の両方を使用します。
Sudo apt-get install wmctrl xdotool
スクリプトを空のファイルにコピーし、get_wlist.py
として保存します
次のコマンドで実行します:
python3 /path/to/get_wlist.py <pid>
ウィンドウを操作、移動、または閉じるために、Linuxにはxdotool
とwmctrl
の2つの重要なツールがあります。これらの2つの中で、xdotool
はおそらく最も堅牢なものであり、一般的にはこれが好みです。両方のツールのオプションは重複していますが、互いに補完し合っています。ウィンドウlistを作成するには、単にwmctrl
が必要です。
したがって、ほとんどの場合、両方のツールを組み合わせて使用することになります。
スクリプトの機能:
スクリプトは、次のコマンドを使用して、現在開いているウィンドウリストを取得します。
wmctrl -lp
これにより、ウィンドウIDとそれが属するpidの両方に関する情報が得られ、出力は次のようになります。
0x05a03ecc 0 2189 jacob-System-Product-Name Niet-opgeslagen document 1 - gedit
次に、スクリプトは、対応するpidに属するウィンドウを除外し、xdotool
コマンドでウィンドウ名を検索します。
xdotool getwindowname <window_id>
見つかったウィンドウを名前で表示します。内部では、これらのウィンドウには番号が付いています。
その後、ユーザーが数字+オプションを入力すると、選択したウィンドウで対応するアクションが実行されます。
wmctrl -ic <window_id>
ウィンドウを正常に閉じる、または
xdotool windowminimize <window_id>
選択したウィンドウを最小化する、または
wmctrl -ia <window_id>
ウィンドウを上げます。