LINUX.ORG.RU

Запуск графической сессии после логина на tty через startx

 , , , ,


0

2

Добрый день! Я тут подумал, что мне, вроде как, не нужен Display Manager, ведь я - единственный пользователь своего компьютера. Возникла мысль о запуске графической сессии просто через startx после логина на tty. Вопрос: не может ли это привести к каким-либо проблемам, вроде какой-нибудь несовместимости с systemd/logind или чего-то вроде того? С какими проблемами я могу столкнуться? Пожалуйста, помогите с этим разобраться. Заранее спасибо.

★★

Так по секрету и xinit не нужен, можно напрямую после запуска X дождаться появления файла /tmp/.X0-lock и запускать клиентов.

anonymous
()

См. похожие темы: RFC HOWTO: автологин в иксовую сессию с помощью systemd

Теоретические проблемы, которые могут возникнуть — гонка с хотплагом видеоадаптера (например, если у тебя USB-видеоадаптер — да, такие есть). Но в большинстве конфигураций это сугубо теоретическая проблеиа.

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

Автозапуск меня не привлекает, достаточно логина и startx. В такой ситуации, вроде, проблем с гонками быть не должно?

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

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

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

if [ "x$(tty)" == "x/dev/tty1" ]
then
    exec startx
fi
avsej
()
Ответ на: комментарий от avsej

Т.е. если логин на tty1, то автоматом старт иксов? А что здесь даёт exec перед startx, и почему это всё именно в bash_profile, а не bashrc?

Norong ★★
() автор топика
Ответ на: комментарий от Norong
  • exec перед startx заменяет startx'ом процесс bash (чтобы не оставалось лишних процессов)
  • bashrc выполняется каждой интерактивной оболочкой, а bash_profile — только при логине

Главное — удостовериться, что startx учитывает значение переменной $XDG_VTNR и запускает Xorg на том VT, который там указан (т. е. на текущем). Иначе как раз огребёшь проблемы с logind.

Если всё сделать правильно, то иксы даже можно запускать без рута или SUID.

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

Вроде того. Тогда потеряешь только мультисит, всё будет стартовать на seat0 (но вряд ли ты им пользуешься).

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

Т.е. если я, скажем, открываю терминал - то только bashrc, а если sudo -i или логин на tty/по ssh, то первым читается bash_profile, а потом bashrc? Ещё у меня есть profile, в нём сказано:

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
А как дела обстоят, если у меня оболочка zsh, а не bash?

Norong ★★
() автор топика

Уже три года как запускаю иксы через startx. Проблем не наблюдаю.

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

Т.е. если я, скажем, открываю терминал - то только bashrc, а если sudo -i или логин на tty/по ssh, то первым читается bash_profile, а потом bashrc?

Да, именно так.

Ещё у меня есть profile, в нём сказано:

Всё правильно сказано. Если нет .bash_profile, то bash читает .profile.

А как дела обстоят, если у меня оболочка zsh, а не bash?

То же самое, только вместо .bash_profile — .profile.

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

А если я на разных tty иксы позапускаю от разных юзеров, это не будет мультиситом?

Это будет несколькими попеременными сессиями на одном и том же seat0 (аналог fast user switching в современных DM).

Если ты воткнёшь вторую видеокарту и подключишь к ней второй монитор, на нём не будет никаких VT (или будет дублирование, я уже не помню).

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

В bashrc ли чего у тебя там за шелл.

[ -z $(pgrep X) ] && xinit ~/.xinitrc

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

Т.е. у zsh сначала .profile, а потом .zshrc, ага?

multiseat

Я правильно понимаю, что это не имеет ничего общего со сценарием, когда я просто подключаю второй монитор и работаю с несколькими мониторами? Если да, то тогда multiseat мне не нужен, но чисто для спокойствия - можно ли это без DM организовать?

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

Multiseat — это когда у тебя несколько комплектов «монитор-устройства ввода-прочая периферия» и за ними одновременно работает несколько пользователей.

Да, должно быть можно, но поскриптовать придётся.

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

Спасибо, всё понял! И ещё вопрос: мне в xinitrc нужно что-нибудь хитрое прописывать, кроме очевидного exec dbus-launch i3 и всего, что мне нужно? Меня просто смутил стандартный дебиановский /etc/X11/xinit/xinitrc:

#!/bin/sh

# /etc/X11/xinit/xinitrc
#
# global xinitrc file, used by all X sessions started by xinit (startx)

# invoke global X session script
. /etc/X11/Xsession
/etc/X11/Xsession: http://ix.io/1ARd

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

Т.е. у zsh сначала .profile, а потом .zshrc, ага?

Вместо .profile тока .zlogin. В конце мана есть описание порядка запуска файлов.

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

Нет, не «вместо». zshall(1):

Commands are first read from /etc/zshenv; this cannot be overridden. <...> Commands are then read from $ZDOTDIR/.zshenv. If the shell is a login shell, commands are read from /etc/zprofile and then $ZDOTDIR/.zprofile. Then, if the shell is interactive, commands are read from /etc/zshrc and then $ZDOTDIR/.zshrc. Finally, if the shell is a login shell, /etc/zlogin and $ZDOTDIR/.zlogin are read.

Ну и таки да, там zprofile вместо profile.

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

читается после .zshrc

при условии, что zsh запущен из логин-консоли. Но .zprofile тоже канает.

anonymous
()
Ответ на: комментарий от Norong

Да, нужно. В типичном Xsession-скрипте выполняют /etc/X11/xinitrc.d/*, потом подгружают ~/.Xresources (ещё, бывает, вспоминают про ~/.Xkbmap и ~/.Xmodmap), а уже потом запускают пользовательское приложение.

Кстати, зачем dbus-launch? Разве dbus-daemon не запускается скриптами из xinitrc.d?

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

Обнаружил, что в Debian всё, как часто бывает, устроено хитро. Тот самый скрипт Xsession, который я скинул выше, вызывается при startx, и как я понял, .xinitrc не нужен - вместо него нужен .xsession. Xsession запустит всё из каталога Xsession.d (xinitrc.d у нас нет), там и dbus, и чтение Xresources и так далее, а потом выполнит .xsession

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

Отлично. У вас (в дебиане) всё сделано наиболее «исторически правильно».

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