Как создать новый сеанс входа в систему при запуске xinit из консоли?
Моя текущая система загружается в консоль, и я не хочу использовать диспетчер отображения.
После обновления до Ubuntu 13.10
Я понял, что ConsoleKit
больше не используется для управления логинами пользователей и systemd-logind
вместо этого используется сервис.
мой .xinitrc
Конфиг для Ubuntu 13.04 выглядел так:
exec ck-launch-session startxfce4
ck-launch-session
позволил мне смонтировать диски или выключить / перезагрузить / приостановить работу ПК.
Единственное место, где я мог найти документацию о том, как включить эти функции, было в документации для Arch Linux:
Пользователи должны сначала настроить systemd-logind для управления своим сеансом. Если systemd работает как демон init системы, то это уже происходит.
Затем пользователь должен запустить systemd, указав в своих
~/.xinitrc
:/usr/lib/systemd/systemd --user
Пользователь должен удалить все экземпляры
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.
Поэтому мой вопрос заключается в том, как заставить PAM создать новый сеанс входа в систему после запуска X-сервера?
1 ответ
Я провел всю ночь, глядя на это для своей загрузки консоли Ubuntu + настройки Openbox, и был в той же лодке, что и вы. systemd не используется полностью в Ubuntu 13.10, но он заменяет ConsoleKit, как вы сказали. Я добрался до loginctl и хотел вырвать мои волосы, затем я нашел http://blog.falconindy.com/articles/back-to-basics-with-x-and-systemd.html который работает удовольствие,
Мой.xinitrc выглядит следующим образом -
exec dbus-launch --sh-syntax --exit-with-session openbox-session
Я использовал вспомогательный скрипт в приведенной выше ссылке и использовал псевдоним startx как exec path / to / the helper / script. Работает лакомство и нм-апплет тоже играет в мяч.
PS Если ссылка исчезнет выше, вот вспомогательный скрипт для замены 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" "$@"