LINUX.ORG.RU

Pamusb не работает

 , , , , pamusb-agent


0

1

Линукс Debian Вписал в конфиг

/etc/security/pam_usb.conf
между user:
<agent event="lock">
<cmd>/usr/bin/mate-screensaver-command --lock</cmd>
</agent>
        <agent event="unlock">
<cmd>/usr/bin/mate-screensaver-command --deactivate</cmd>
</agent>
При запуске
 sudo pamusb-agent
Вылезает ошибка:
 Message: 17:22:04.163: Failed to connect to the D-BUS daemon: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11

При запуске из консоли

mate-screensaver-command
Всё работает Помогите пожалуйста



Последнее исправление: fussionbart (всего исправлений: 3)

Ещё одна жертва sudo. Только не говорите, что он тут ни при чём, и что эту проблему можно пачкой костылей обойти, не избавляясь от sudo. Дело ведь не в этом, а в том что автор думает что sudo это «магически повышенные привилегии» и не понимает, что sudo переключает его на другого юзера, а скринсейвер ему нужен от текущего. Возможно, он даже вообще интуитивно не понимает, что такое другой юзер (теоретически то знает конечно).

firkax ★★★★★
()
Ответ на: комментарий от fussionbart

Нет, я имею ввиду что выкинь sudo (вообще удали эту бесполезную прогу из системы), тогда тебе станет намного понятнее как всё устроено. Это костыль, который прячет суть и запутывает пользователей. Само выражение «с sudo/без sudo» уже некорректно.

sudo переключает тебя на суперпользователя («root»). Для этого есть более подходящая и прозрачная утилита - su.

Ты запускаешь pamusb-agent от пользователя «root», только из-за sudo тебе кажется что ты его просто «запустил с sudo» от своего пользователя (+ещё пачка заблуждений но не будем о них), что в корне неверно.

Скринсейвер тебе нужен именно от своего пользователя (и, более того, в контексте текущей графической сессии), того, логином в которого ты создал текущую графическую сессию.

Если ты хочешь, чтобы программа, запущеная от суперпользователя, что-то запускала в графической сессии пользователя, её надо явным образом проинструктировать, что она должна переключиться на указанного пользователя (командой su) и присоединиться к его графической сессии (для этого надо запускаемой программе передать переменную окружения $DISPLAY, такую же как настроена в сессии), а так же, возможно, понадобятся ещё какие-то штуки подключить, которые в рамках графической сессии уже автоматически есть, а у запущеной от рута pamusb их, очевидно, нет.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 4)
Ответ на: комментарий от firkax

Как вы сказали «костыль» sudo я удалил :) Печально что алиасы стали ругаться на sudo, но это поправимо. В консоли я от обычного пользователя, в системе только я и root. Из консоли mate-screensaver-command -l прекрасно запускается (от непривилегиро́ванного пользователя) Pamusb-agent так же не запускается от обычного пользователя. Объясните пожалуйста поподробнее, что мне нужно сделать.

fussionbart
() автор топика
Ответ на: комментарий от fussionbart

Попробуй так например

su username -c 'DISPLAY=:0 /usr/bin/mate-screensaver-command --lock'

(в качестве команды в том конфиге)

username - имя пользователя от которого графическая сессия запущена

и в графичекском терминале проверь что `echo $DISPLAY` пишет :0

pamusb-agent пропиши в системный автозапуск, проще всего в /etc/rc.local, а если хочешь сложнее то создавай ему или юнит systemd (если у тебя он) или /etc/init.d/ скрипт (для sysvinit)

чтобы разово запустить - залогинься за рута через su и оттуда запускай

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от firkax

Спасибо огромное, все-таки смог исправить ошибку таким образом, сразу говорю - не имею понятия для чего нужны некоторые части кода

<agent event="lock">
<cmd>mate-screensaver-command -\-lock</cmd>
<env>DISPLAY=:1</env>
<env>DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus</env>
</agent>
<agent event="unlock">
<cmd>gnome-screensaver-command -\-deactivate</cmd>
<env>DISPLAY=:1</env>
<env>DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus</env>

</agent> 

fussionbart
() автор топика