Вернуться назад

PCManFM

Для того, чтобы мы могли работать с PCManFm от имени root'а, нам понадобятся:


# По умолчанию в Ach уже должен быть установлен polkit.
# Если мы проверим:
    ps aux | grep polkit
# то получим что-то вроде:
    polkitd     1374  0.0  0.0 385764 12608 ?        Ssl  12:46   0:18 /usr/lib/polkit-1/polkitd --no-debug --log-level=notice
    
# То есть у нас уже работает демон polkitd.
# Нам нужен только GUI-агент, чтобы ...
# ... графическая программа могла запускать ...
# ... графическое окно для ввода пароля.

# Поэтому установим polkit-gnome и gvfs:
sudo pacman -S polkit-gnome gvfs

# Далее мы запускаем GUI-агент:
/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 &

# Или лучше так:
nohup /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 >/dev/null 2>&1 &

# И после этого мы можем в PCManFM открывать папки вот так:
admin:///root

# Чтобы запускать GUI-агент автоматически при входе в систему, добавим в ~/.config/sway/config:
exec /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1

Можно запустить по-другому PCManFM:


pkexec env DISPLAY=$DISPLAY \
XAUTHORITY=$XAUTHORITY \
WAYLAND_DISPLAY=$WAYLAND_DISPLAY \
XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR pcmanfm

# pkexec
# - спрашивает пароль через polkit, а не через sudo
# - учитывает правила доступа polkit (можно разрешить/запретить разным пользователям запускать разные программы)
# - по умолчанию сбрасывает все переменные окружения (это сделано специально ради безопасности, чтобы root-программы не получили случайно небезопасные переменные от твоей сессии).

Графические приложения должны знать:

Когда pkexec сбрасывает окружение, этих переменных нет. Поэтому мы руками «передаём» их через env ... pcmanfm.

Что происходит в итоге:

Итог:

Ещё можно запустить PCManFM от root'а вот так:


sudo -E pcmanfm

# Но обычно рекомендуют pkexec, а не sudo pacman,потому что
# ... sudo под Wayland/X11 ломает доступ к сокету дисплея.