Как создать новый сеанс входа в систему при запуске 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" "$@"
Другие вопросы по тегам