Как создать новый сеанс регистрации во время запуска xinit с консоли?

4

Моя текущая система загружается на консоль, и я не хочу использовать диспетчер отображения.

После обновления до Ubuntu 13.10 я понял, что ConsoleKit больше не используется для управления входами пользователей, и вместо этого используется systemd-logind .

My .xinitrc config для 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 , для завершения сервера, если что-то висит. Да, есть обходные пути, например call killall xinit , но это не решает проблему.

Я думаю, что мне не разрешено делать shutdown. Если я запускаю X-сервер в новом tty, это потому, что новый сеанс logind не создан. Прочитав документацию по протоколу , я понимаю, что мне, вероятно, нужно создать новый сеанс после запуска X сервер, и этот сеанс должен быть отмечен как активный, когда я нахожусь на сервере X. Это можно проверить с помощью следующей команды:

loginctl show-session $XDG_SESSION_ID | grep Active

Следующая строка в документации по логистике меня смущает:

  

CreateSession () и ReleaseSession () могут использоваться для открытия или закрытия сеансов входа в систему. Эти вызовы никогда не должны вызываться непосредственно клиентами. Создание / закрытие сеансов - это исключительно работа PAM и его модуля pam_systemd.

Итак, мой вопрос: как я могу заставить PAM создать новый сеанс логинга после запуска X-сервера?

    
задан jeremija 20.10.2013 в 13:23
источник

1 ответ

1

Я всю ночь смотрел на эту консоль для загрузки Ubuntu + Openbox и находился в той же лодке, что и вы. systemd не используется полностью в Ubuntu 13.10, но он заменяет ConsoleKit, как вы сказали. Я дошел до локуса и хотел вырвать мои волосы, тогда я нашел Ссылка , которая работает с удовольствием.

Мой .xinitrc выглядит следующим образом:

exec dbus-launch --sh-syntax --exit-with-session openbox-session

Я использовал вспомогательный скрипт в ссылке выше и aliased startx as, 'exec path / to / the / helper / script'. Работает с удовольствием, и nm-апплет тоже играет в мяч.

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" "[email protected]"
    
ответ дан Nathan Pardoe 30.10.2013 в 00:57