Я предполагаю, что код запускается от имени пользователя root или udev, и что у этих пользователей нет полномочий общаться с вашим оконным менеджером и делать Tk окна или что-то в этом роде. Может помочь какая-то форма общения, например сценарий udev записывает записи в журнал или отправляет сообщения в сокет, который на другой стороне чего-либо в среде оконного менеджера может читать сообщения и предпринимать соответствующие действия.
Когда вы запускаете скрипт из интерактивной оболочки, у вас есть переменная окружения DISPLAY
, указывающая сервер, к которому вы имеете право подключиться.
Когда сценарий запускается udev
, это не так.
В общем, вы не хотите, чтобы udev
делал что-либо, что зависит от наличия X11, и вы определенно не хотите увеличивать его поверхность атаки таким образом.
Похоже, что вы ищете систему подписки/уведомлений, поэтому вы можете запустить слушателя (как себя) в X-сессии, а уведомление запускать с udev
. Возможно, вы захотите рассмотреть DBus или UDisks для этого; альтернативно, вы можете запустить inotifywait
, следящий за созданием файла устройства, и читать его события в вашем сценарии (опять же, все от имени пользователя, не root).