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