文字通り、あなたが求めたものではありませんが、少なくとも(効果的に)比較可能な解決策は、ショートカットキーの下に以下のスクリプトを置くことです。
何をする
ショートカットキーを使用する場合:
次に:
- ユーザーがを押すEnterと、システムがシャットダウンします
- ユーザーが何もしない場合、システムは30秒(または設定したい他の期間)待機してシャットダウンします。
- ユーザーが30秒間マウスを動かした場合、手順は停止します
スクリプト
#!/usr/bin/env python3
import subprocess
import time
#--- set the location of the close button x, y
q_loc = [1050, 525]
#--- set the time to wait before shutdown
countdown = 30
subprocess.Popen(["gnome-session-quit", "--power-off"])
# for slower systems, set a longer break, on faster systems, can be shorter:
time.sleep(0.4)
subprocess.Popen(["xdotool", "mousemove", str(q_loc[0]), str(q_loc[1])])
coords1 = q_loc
t = 0
while True:
time.sleep(1)
cmd = "xdotool", "getmouselocation"
currloc = subprocess.check_output(cmd).decode("utf-8").split()[:2]
coords2 = [int(n.split(":")[1]) for n in currloc]
if coords2 != coords1:
break
else:
if t >= countdown:
subprocess.Popen(["xdotool", "key", "KP_Enter"])
break
t += 1
使い方
あなたはそれを使用する方法を知っていると確信していますが、ここでは習慣的な理由で行きます:
スクリプトは以下を使用します xdotool
sudo apt-get install xdotool
スクリプトを空のファイルにコピーして、名前を付けて保存します run_close.py
ヘッドセクションで、閉じるウィンドウのシャットダウンボタンの画面の位置を設定します(最初の推測は正しかった)。
#--- set the location of the close button x, y
q_loc = [1050, 525]
無人でシャットダウンするまでの待機時間:
#--- set the time to wait before shutdown
countdown = 30
次のコマンドでテスト実行します。
python3 /path/to/run_close.py
すべてのオプションを使用してテストします。Enter即時シャットダウン、無人シャットダウンの場合は押す、マウスの移動による手順の中断
すべてが正常に機能する場合は、ショートカットキーに追加します。[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。「+」をクリックして、コマンドを追加します。
python3 /path/to/run_close.py
編集
追加の設定を必要としないバージョンのスクリプトの下。画面の解像度に関係なく、終了ボタンの座標を計算します。
セットアップはほとんど同じですが、[3.]
スキップできます。
#!/usr/bin/env python3
import subprocess
import time
#--- set the time to wait before shutdown
countdown = 30
def get_qloc():
xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
scrs = [s.split("+") for s in xr if all([s.count("x") == 1, s.count("+") == 2])]
center = [int(int(s)/2) for s in [scr[0] for scr in scrs if scr[1] == "0"][0].split("x")]
return [center[0] + 250, center[1]]
q_loc = get_qloc()
subprocess.Popen(["gnome-session-quit", "--power-off"])
# for slower systems, set a longer break, on faster systems, can be shorter:
time.sleep(0.4)
subprocess.Popen(["xdotool", "mousemove", str(q_loc[0]), str(q_loc[1])])
coords1 = q_loc
t = 0
while True:
time.sleep(1)
cmd = "xdotool", "getmouselocation"
currloc = subprocess.check_output(cmd).decode("utf-8").split()[:2]
coords2 = [int(n.split(":")[1]) for n in currloc]
if coords2 != coords1:
break
else:
if t >= countdown:
subprocess.Popen(["xdotool", "key", "KP_Enter"])
break
t += 1
説明
システムを閉じるためのセッションマネージャウィンドウのサイズは、画面の解像度に関係なく、常に中央揃えで固定(絶対)サイズです。したがって、画面の中心に対する位置は一定の要因です。
あとは、画面の解像度を読み取り、そこからボタンの位置を計算するだけです。
適用された関数(get_qloc()
)は、左画面の解像度を計算します。これは、ダイアログが表示される画面であるためです。
注意
行に設定されている時間は、time.sleep(0.4)
比較的遅いシステム用に設定されており、シャットダウンウィンドウが表示された後にマウスが移動することを確認します。より高速なシステムでは短くすることができ、より遅いシステム(VMなど)ではより長く設定する必要があります。