XOpenDisplay(NULL)
будет проверять переменную окружения DISPLAY
, которая обычно не устанавливается в контексте udev.Чтобы иметь возможность использовать XOpenDisplay(something)
(включая something=NULL
), вам необходим ключ доступа к экземпляру X-сервера.
Переменная среды XAUTHORITY
должна быть указана в месте расположения файла ключа, еслиВы хотите использовать XOpenDisplay
или любую графическую программу, которая его использует.Если этот env var пустой, ~/.Xauthority
используется как запасной вариант.
Попытка запустить некоторую графическую программу из udev - плохая идея (читай: что-то не так в вашем подходе и дизайне): вы нене знаю номер дисплея XВы также не можете догадаться, потому что может быть более одного активного X-сервера.И тогда вам нужен файл ключа, который не всегда можно определить или получить.udev может работать как root, но есть такие вещи, как монтирование NFS с root_squash
и переменная XAUTHORITY
, с помощью которой люди могут перемещать свой ключевой файл.
В наши дни графические проблемы работают так, что пользовательили используемая им среда рабочего стола должна запустить фоновую программу, специально прослушивающую определенные события.Просто для того, чтобы вы не могли просто вторгаться на чужие экраны, но должны соблюдать их систему уведомлений о событиях.