전원 버튼 누름을 처리하기 위해 tkinter 앱을 만들었지만 시작해야 할 때 시작되지 않습니다. acpi 작업 으로 사용하면 echo hello>>~/junk
전원 버튼을 누를 때마다 "hello tojunk"가 추가됩니다. 작업 명령 앞에 exec 또는 점을 추가하면(현재 셸에서 실행하기 위해) 도움이 되지 않습니다. 어떻게 작동하게 할 수 있나요?
편집하다:
글쎄요, MikeJonesey의 도움으로 문제를 해결했는데 또 다른 문제가 생겼습니다. 스크립트에 suid 비트가 설정되어 있어도 루트 권한으로 스크립트를 호출하기 때문에 복구하려면 xlock 화면에서 루트 비밀번호를 입력해야 합니다.
편집 2:
다음과 같이 acpi 이벤트 파일에서 애플리케이션을 시작할 수 있는 것 같습니다.
event=button/power PBTN action=export DISPLAY=:0 && export XAUTHORITY=/home/saga/.Xauthority &&/home/saga/bin/shutdownprompt
그러나 이벤트 파일에서 호출된 핸들러 스크립트는 아닙니다.
button/power ) if [ "$2" = "PBTN" ];then export DISPLAY=:0 && export XAUTHORITY=/home/saga/.Xauthority && /home/saga/shutdownprompt; fi ;;
다음은 키를 누를 때마다 호출되는 기본 처리기 스크립트의 일부입니다. 여기서 문제가 무엇입니까?
답변1
X를 사용하려면 뭔가를 추가해야 합니다.
나는 그것들을 cronjob에서 사용합니다(똑같은 일입니다...)
#*/15 * * * * export DISPLAY=:0.0 && export XAUTHORITY=/home/mike/.Xauthority && /home/mike/bin/defunct-check.sh
이는 모든 스크립트에서 작동합니다.
답변2
이 문제에 대한 간단한 해결책이 있어야 할 것 같습니다. 나 자신도 비슷한 일을 시도해 보았습니다: 키보드 버튼을 눌렀을 때 화면 캡처 프로그램(flameshot)을 실행하는 것입니다.
마지막으로 나에게 도움이 된 해결책은 내 홈 디렉터리에 FIFO(이름이 지정된 파이프)를 만드는 것이었습니다 .acpi_execute.pipe
. 그런 다음 이라는 다음 스크립트를 사용합니다 .acpi_execute
.
#!/usr/bin/bash
while true ; do
while IFS='' read command ; do
$command
done < ~/.acpi_execute.pipe
done
나는 성능(매우 가벼움)과 타일링 특성 때문에 GNOME, KDE 등보다 i3를 선호합니다. 내 i3 구성 파일 맨 아래에는 ~/.config/i3/config
다음이 있습니다.
exec ~/.acpi_execute
이를 통해 데스크탑 환경이 시작될 때(컴퓨터에서 직접 또는 원격 VNC 연결을 통해) 스크립트가 실행될 수 있습니다.
위 내용에는 보안 관련 내용이 포함되어 있습니다. 예를 들어 누구든지 위 파이프에 쓸 수 있으면 임의의 명령을 실행할 수 있습니다.너처럼. 이것은 분명히 나쁠 것입니다. 자신이 소유한 FIFO 600 권한을 부여하면 이러한 위험을 줄일 수 있습니다. 가능한 명령을 제한할 수도 있습니다. 즉, 을 실행하지 $command
않고 원하는 특정 명령(예: flameshot gui
)을 실행합니다.