하지 말 그대로 당신이 물었지만, 적어도 (효과적으로) 비교 솔루션 바로 가기 키 아래에 아래의 스크립트를 넣어 것입니다 무슨.
그것이하는 일
바로 가기 키를 사용하는 경우 :
그때:
- 사용자가를 누르면 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
사용하는 방법
나는 당신이 그것을 사용하는 방법을 알고 있다고 확신하지만, 여기서 우리는 habbit 이유로 간다
스크립트는 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)에서는 더 길게 설정해야 할 수 있습니다.