Я работаю в простом проекте на моем малине pi, который размывает некоторые светодиоды различными способами на некоторых системных событиях (например, чтение диска, связь Ethernet, перегрузка процессора) и эти светодиоды должны быть отключены через некоторое время после того, как система простаивает (эти светодиоды будут изменять свою интенсивность, если не будет обнаружена активность sys).XOpenDisplay не работает при запуске с демона (язык C)
Чтобы достичь определения простоя, я использую XScreenSaver, пока здесь все не работает безупречно.
Как мой проект должен был исполняться как демон (etc/init.d) и должен был запускаться с правами root (потому что библиотека pigpio), связь с X Server (через XOpenDisplay) возвращает NULL каждый раз, даже когда система готова и в графическом интерфейсе. На терминале, запуская это вручную, все работает отлично.
Как я узнал, я понял, что невозможно получить доступ к X-серверу, когда во время загрузки нет консоли, и нет способа получить к ней доступ по соображениям безопасности.
поэтому я спрашиваю, как я мог бы достичь этого (определить время простоя) на простейшем пути? (я попробовал автозапуск, попробовал установку переменной DISPLAY в скрипте запуска, похоже, не работает.) Я новичок в разработке Linux и не могу понять, как правильно ее решить.
Непонятно, в чем проблема. Но есть плохой запах XY-проблемы. – Olaf
Мне нужно использовать XScreenSaverQueryInfo для проверки состояния системы IDLE, но я не могу заставить его работать с моим приложением как DAEMON. когда я начинаю его с терминала, его работы. – eduardogarcia234
следующий код: xidle = XOpenDisplay (0); if (xidle) { \t XScreenSaverInfo * info = XScreenSaverAllocInfo(); \t XScreenSaverQueryInfo (xidle, DefaultRootWindow (xidle), info); \t ret = (info-> idle> 60000? (Info-> idle> 900000? 2: 1): 0); } – eduardogarcia234