LINUX.ORG.RU

Отказ создания новой сессии

 


1

3

иксы стартуют через сервис.

# Licensed under GPLv3.
# Ivan Shapovalov <intelfx100@gmail.com>
# modded by plugnburn (http://github.com/plugnburn/)

[Unit]
Description=Xorg server on %I
Documentation=man:Xorg(1)
After=systemd-user-sessions.service

Conflicts=getty@%i.service
After=getty@%i.service

[Service]
User=user
PAMName=login

StandardOutput=tty
StandardInput=tty-fail

ExecStart=/usr/bin/xinit -- /usr/bin/X -nolisten tcp :0 vt${XDG_VTNR}
Type=simple
Restart=always
RestartSec=0
UtmpIdentifier=:0
TTYPath=/dev/%I
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
IgnoreSIGPIPE=no
WorkingDirectory=/home/user

[Install]
WantedBy=multi-user.target

После обновления systemd до 222, новую сессию на tty не создаёт при перезапуске сервиса, если сессия на этом tty уже открыта ( это не описано в changelog, но коммиты такие есть - вот они 1 2 3 ), старая не закрывается если в ней висит хоть 1 процесс, в моём случае это ssh-agent запускающийся из плагина oh-my-zsh.

Можно ли как-то модифицировать этот unit, чтобы он подхватывал уже открытую сессию, если она есть на текущем tty?

Или если не возможно решить выше обозначенное, кто может посоветовать альтернативные варианты запуска ssh-agent user-wide, дабы не вводить постоянно пароли на ключи.

★★★

Как насчёт KillUserProcesses=yes в logind.conf?

Или, как вариант, ExecStopPost=/usr/bin/loginctl kill-session. Думаю, должно сработать.

Это всё, разумеется, не про «подхватывать старую сессию», а скорее «прибивать старую».

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 3)

Что касается запуска ssh-agent в режиме per-user — это вполне несложно сделать в любом случае.

  1. ~/.config/systemd/user/ssh-agent.service:
    [Service]
    Type=forking
    ExecStart=/usr/bin/ssh-agent -a %t/ssh-agent-socket
    Restart=on-abort
    
    [Install]
    WantedBy=basic.target
    
  2. systemctl --user enable ssh-agent
  3. ~/.pam_environment:
    SSH_AUTH_SOCK=/run/user/<подставь свой UID>/ssh-agent-socket
    
  4. /etc/pam.d/system-login:
    [...]
    session required pam_env.so
    [...]
    
intelfx ★★★★★
()

Почему бы не воспользоваться каким-нибудь DM? Это не костыль, а альтернативное решение задачи. Даже если всего один юзер и всего одно окружение, то хотя бы ввод пароля организован.

r3lgar ★★★★★
()
Ответ на: комментарий от r3lgar

Даже если всего один юзер и всего одно окружение, то хотя бы ввод пароля организован.

Ввод пароля организован - wm делает lockscreen на старте. Профит от dm неясен более чем полностью.

dhampire ★★★
() автор топика
Ответ на: комментарий от dhampire

Ну, кхм, проблему этот вариант решает: новая сессия будет создаваться корректно.

Другое дело, что механизм сессий работает именно так и никак иначе. Рестарт юнита — это прибитие всех процессов и пересоздание сессии. Вариантов два: либо не рестартить юнит, либо запускать ssh-agent вне сессии, как я показал.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от dhampire

Профит от dm неясен более чем полностью.

Например, slim имеет в комплекте локер, который даже тему от DM берёт, и ни чем не отличается от своего DM, кроме ввода юзернейма. Да и этот шаг можно опустить, заменив автовходом при необходимости. С systemd мне его даже настраивать не пришлось — добавил в graphical.target, и пользуюсь. И проблем таких странных у меня нет.

r3lgar ★★★★★
()
Ответ на: комментарий от intelfx

либо запускать ssh-agent вне сессии, как я показал.

он запускается вне сессии, но после разлогивания пользователя, user instance systemd завершается и завершаются все порождённые им процессы, логинимся обратно и наслаждаемся вводом овер дохера паролей на ключи.

на версии 221, после разлогина пользователя, ssh-agent порождённый из плагина oh-my-zsh, просто висел в уже созданной сессии, создание новых сессии на том же tty никак не блокировалось, и после релогина не требовалось вводить снова все пароли на ключи. Вот ровно такое же поведение видимо уже не сделать.

dhampire ★★★
() автор топика
Ответ на: комментарий от r3lgar

И проблем таких странных у меня нет.

Я рад за вас, но мои проблемы созданы не отсутствием DM, а вполне конкретным человеком который решил что one tty - one session.

dhampire ★★★
() автор топика
Ответ на: комментарий от dhampire

one tty - one session

А где это не так? Так было принято задолго до линуксов. Скажи спасибо, что не «one tty — one task» (привет, DOS).

r3lgar ★★★★★
()
Ответ на: комментарий от dhampire

он запускается вне сессии, но после разлогивания пользователя, user instance systemd завершается и завершаются

loginctl enable-linger $USER

intelfx ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.