Моя текущая система загружается в консоль, и я не хочу использовать диспетчер отображения.
После обновления до Ubuntu 13.10
я понял, что ConsoleKit
больше не используется для управления логинами пользователей, и вместо этого используется сервис systemd-logind
.
Мой .xinitrc
конфиг для Ubuntu 13.04 выглядел так:
exec ck-launch-session startxfce4
ck-launch-session
позволил мне смонтировать диски или выключить / перезагрузить / приостановить ПК.
Единственное место, где я мог найти документацию о том, как включить эти функции, было в документации для Arch Linux :
Пользователи должны сначала настроить systemd-logind для управления их сессия. Если systemd работает как демон init system, то это уже происходит.
Затем пользователь должен запустить systemd, добавив в свои
~/.xinitrc
следующее:/usr/lib/systemd/systemd --user
Пользователь должен удалить все экземпляры
blockquote>ck-launch-session
илиdbus-launch
из своих~/.xinitrc
, как эти команды не нужны.Однако, поскольку Ubuntu использует
upstart
, а неsystemd
, я не могу сделать это в своей конфигурации.Я попытался сделать что-то похожее, поэтому я добавил это в свой
.xinitrc
:export DESKTOP_SESSION=xfce init --user
И сессия xfce начинается, но я все еще не могу смонтировать жесткие диски или перезагрузить компьютер, завершить работу и приостановить мой компьютер. По сути, это то же самое, что прямой вызов
startxfce4
.Если я запускаю X-сервер с аргументом
vt01
, где01
- идентификатор текущегоtty
, все работает нормально, но я не могу использовать такие вещи, какCTRL+C
, чтобы завершить работу сервера, если что-то висит. Да, есть обходные пути, например, вызовkillall xinit
, но это не решает проблему.Я думаю, что я не могу завершить работу Если я запускаю X-сервер в новом tty, это потому, что новый сеанс
logind
не создан. После прочтения документации logind я понимаю, что мне, вероятно, нужно создать новый сеанс после запуска X-сервера, и этот сеанс должен быть помечен как активный, когда я нахожусь на X-сервере. Это можно проверить с помощью следующей команды:loginctl show-session $XDG_SESSION_ID | grep Active
Следующая строка в документации logind смущает меня:
CreateSession () и ReleaseSession () может использоваться для открытия или закрытия сеансов входа в систему. Эти вызовы никогда не должны вызываться напрямую клиентами. Создание / закрытие сеансов - исключительно работа PAM и его модуля pam_systemd.
blockquote>Поэтому мой вопрос заключается в том, как заставить PAM создать новый сеанс входа в систему после запуска X-сервера?
Я всю ночь смотрел на это для своей загрузки консоли Ubuntu + настройки Openbox и был в той же лодке, что и ты. systemd не используется полностью в Ubuntu 13.10, но он заменяет ConsoleKit, как вы сказали. Я дошел до loginctl и хотел вырвать мои волосы, затем я нашел http://blog.falconindy.com/articles/back-to-basics-with-x-and-systemd.html [ 112], который работает удовольствие.
Мой .xinitrc выглядит следующим образом -
exec dbus-launch --sh-syntax --exit-with-session openbox-session
Я использовал вспомогательный скрипт в приведенной выше ссылке и использовал псевдоним startx как «exec path / to / the / helper / script». Работает лакомство, а нм-апплет тоже играет в мяч.
P.S. В случае, если ссылка исчезнет выше, вот вспомогательный скрипт для замены startx.
#!/bin/bash
TTY=${TTY:-$(tty)}
TTY=${TTY#/dev/}
if [[ $TTY != tty* ]]; then
printf '==> ERROR: invalid TTY\n' >&2
exit 1
fi
printf -v vt 'vt%02d' "${TTY#tty}"
xinit -- "$vt" "$@"