Выполнение сценария для воздействия на сеанс x без полномочий root от имени пользователя root

С другого tty я могу запустить

DISPLAY=:0 notify-send hullo

и увидеть сообщение в моем сеансе работы с зубочисткой. Но если я войду в систему как root, это не сработает. Нет и

USER=toothrot DISPLAY=:0 notify-send hullo

Как мне заставить его работать от root?

Мне это нужно, потому что я хочу создать правило udev, которое влияет на мой сеанс x. Используя Arch.

0
01.03.2017, 21:31
3 ответа

X может иметь два способа авторизации клиентов. Один способ - использование cookies; тогда вам нужно установить DISPLAY=:0 и XAUTHORITY=/home/yourusername/.Xauthority.

В вашем случае я предполагаю, что это делается с помощью xhost, иначе установки DISPLAY было бы недостаточно. Введите xhost, чтобы увидеть, кто авторизован.

Возможно, у вас есть cookie ~/.Xauthority вместе с xhost +SI:localuser:toothrot авторизацией.

Вы можете разрешить root доступ к дисплею :0 с помощью DISPLAY=:0 xhost +SI:localuser:root, но вы должны сделать это как обычный пользователь. Использование cookie - лучший способ:

DISPLAY=:0 XAUTHORITY=/home/toothrot/.Xauthority notify-send hullo

Чтобы выполнить notify-send от имени пользователя:

su toothrot -c 'DISPLAY=:0 XAUTHORITY=/home/toothrot/.Xauthority notify-send hullo'
0
28.01.2020, 04:48

Предположительно, вы давно решили свою проблему, но для полноты картины общее решение взято (из здесь):

$ my_user="toothrot"
$ my_user_id=$(more /etc/passwd | awk -F: '/^'${my_user}':/ {print $3}')
$ sudo -u $my_user DISPLAY=':0' DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/${my_user_id}/bus /usr/bin/notify-send "hullo"

Если у вас есть несколько экранных сеансов, ваш пробег может различаться в зависимости от DISPLAY=" :0" выше. Хотя это для другого поста.

0
02.05.2020, 18:07

Приведенные выше ответы несколько корявые и не работают корректно для нескольких пользователей или нескольких дисплеев. Может произойти атака с повышением привилегий, если пользователь создаст символическую ссылку ~/.Xauthorityна защищенный файл. Альтернативой может быть полное забвение udevи использование вместо него uudev , который запускается не как -root в вашем собственном X-сеансе. Вы только что создали файл ~/.config/uudev.conf, который содержит:

* ACTION="bind", DRIVER="whatever",...
notify-send hullo

Если вы запустите systemctl --user restart uudevиз файла ~/.xsessionили ~/.xinitrc, то notify-sendпросто запустится с уже установленными соответствующими переменными DISPLAYи XAUTHORITY.

0
22.06.2020, 06:08

Теги

Похожие вопросы