которому надо общаться с Х-сервером. Не работает, жалуется на "unable to open display :0" и "No protocol specified". ЧЯДНТ?
Раньше было unable to open display '', но я потом прописал в юнит-файл DISPLAY=:0.
И при этом X-сервер запущен от рута или от какого-то пользователя?
Обычный пользователь.
давай-ка мы попробуем избавиться от потенциальной проблемы XY: что это за сервис такой, которому надо работать от рута и с иксами одновременно?
Он не очень популярен и известен. Нужен был кейлоггер (самый похожий класс программ из известных), который работает всегда (поэтому он вроде через /dev/input/event* читает события (для этого и нужен рут)). Но пришлось к нему недавно прикрутить и определение активного окна, что и было сделано через xprop (для этого и нужны иксы).
для чтения из /dev/input не нужен рут
без рута происходит segfault. ошибка на открытии этого файла...
ls -al /dev/input/ покажи
ну вон видишь группу input? создай systemd-user-сервис, которому добавь группу input (себя, видимо, тоже в группу input придётся добавить)
а теперь покажи вывод id
В интернетах написано, что это не безопасно. Что-то про "любой, кто в этой группе сможет читать события ввода от любых устройств и сможет эмулировать события ввода". Если бы была проблема доступа из юзера к устройствам, то я мог бы просто chmod 777 /dev/input/event*, но ведь это же неправильный, несекьюрный путь. И user service - неудобно, особенно если юзеров будет много и они будут постоянно изменяться
То есть дать рутовый доступ левой программе, которая не умеет даже проверить, что у нее нет доступа до нужных файлов, -- это безопасно? :)
Обсуждают сегодня