Запуск графического интерфейса пользователя из события acpi

Запуск графического интерфейса пользователя из события acpi

Я сделал приложение 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).

Связанный контент