
Я сделал приложение tkinter для обработки нажатия кнопки питания, но оно не запускается, когда должно. Хотя если я использую его echo hello>>~/junk
как действие acpi, оно добавляет hello в junk для каждого нажатия кнопки питания. Добавление exec или точки перед командой действия (для выполнения в текущей оболочке) не помогло. Как мне заставить его работать?
Редактировать:
Хорошо, я заставил это работать с помощью mikejonesey, но после этого появилась еще одна проблема. Скрипт вызывается с привилегиями root, даже с установленным битом suid на скрипте, поэтому мне приходится вводить пароль root на экране 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
Я предпочитаю i3, а не GNOME, KDE и т. д., из-за его производительности (очень легкий) и тайловой природы. В нижней части моего файла конфигурации i3 ~/.config/i3/config
у меня есть:
exec ~/.acpi_execute
Это позволяет запускать скрипт при каждом запуске моей среды рабочего стола (непосредственно на компьютере или через удаленное VNC-подключение).
Имейте в виду, что вышесказанное имеет последствия для безопасности. Например, если кто-либо может писать в указанный выше канал, он может выполнять произвольные командыкак и ты. Это, очевидно, было бы плохо. Предоставление разрешений FIFO 600, принадлежащих вам, снижает этот риск. Вы также можете ограничить возможные команды. То есть, не выполняйте $command
, а скорее конкретную команду, которую хотите (например, flameshot gui
).