acpi 이벤트에서 GUI 트리거

acpi 이벤트에서 GUI 트리거

전원 버튼 누름을 처리하기 위해 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)을 실행합니다.

관련 정보