Inicia o X após o login automático

4

Eu tenho um login automático de trabalho em um console virtual após a inicialização. Agora quero que o servidor X seja iniciado automaticamente, em vez de digitar startx . Isso funcionou antes, mas depois de mudar para o systemd, o X não iniciava sozinho. De acordo com a página wiki , eu editei meu ~/.bash_profile :

#
# ~/.bash_profile
#
[[ -f ~/.bashrc ]] && . ~/.bashrc
[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx

Mas o X não inicia (a execução de startx funciona manualmente).

O wiki também observa:

X must always be run on the same tty where the login occurred, to preserve the logind session. This is handled by the default /etc/X11/xinit/xserverrc.

Mas não sei como lidar com isso. Meu /etc/X11/xinit/xserverrc :

#!/bin/sh
if [ -z "$XDG_VTNR" ]; then
  exec /usr/bin/X -nolisten tcp "$@"
else
  exec /usr/bin/X -nolisten tcp "$@" vt$XDG_VTNR
fi

O que estou fazendo de errado?

UPDATE

~/.xinitrc :

#!/bin/sh
#
# ~/.xinitrc
#
# Executed by startx (run your window manager from here)

# Keyboard layout
setxkbmap -layout de nodeadkeys
# Set the cursor
xsetroot -cursor_name left_ptr

# Autostart
tint2 & #Taskbar
/usr/lib/notification-daemon-1.0/notification-daemon & #Notifications
numlockx & #activate numlock

case "$1" in
    openbox)
        exec ck-launch-session openbox-session ;;
    xmonad)
        exec ck-launch-session xmonad ;;
    *) #default
        exec ck-launch-session xmonad ;;
esac

Eu não tenho um arquivo ~/.Xresources e não precisei de um antes. É importante?

    
por user905686 27.01.2013 / 11:06

2 respostas

5

Não tenho certeza do que o XDG_VTNR implica, mas esse script funciona para mim. coloque a linha em ~/.bashrc

(Eu faço auto-X em tty3)

if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty3 ]]; then exec startx; fi

Além disso, defina "não está funcionando". Isso funcionará se você ativar startx manualmente? Se não, examine seu ~ / .xinitrc primeiro.

    
por 27.01.2013 / 11:13
0

Em .bash_profile , você pode descobrir (após o autologin com getty -a em /etc/inittab ) com qual tty você está com tty (se você estiver de fato em X, pode ser assim: /dev/pts/1 - isso é o que a p check está abaixo. Em seguida, defina uma variável para armazenar essa informação; mais tarde, use-o para iniciar o X com xinit .

Você também deve configurar ~/.xinitrc e ~/.Xresources ; um bom começo de ~/.xinitrc é xrdb ~/.Xresources - verifique as páginas do manual para tudo isso. Você pode encontrar alguns exemplos aqui .

CURRENT_VT='tty'
if [[ ${CURRENT_VT[6]} == "p" ]]; then
    export VT="X"
else
    export VT=${CURRENT_VT: -1:1}
fi

# ... [cut] initialize everything else ...

# OK, done; let's start applications and X depending on where we are

case $VT in
    (1) emacs ;;
    (5) wait_for_internet
        irssi --connect=open.ircnet.net ;;
    (6) xinit ;;
    (X) ... do X stuff ... ;;
esac

EDITAR

Por engano, eu postei o código zsh acima - na sintaxe bash, ele seria parecido com isso (com a reserva que é muito menos testado que o código zsh, que roda todos os dias no meu computador). O resto não mudou.

CURRENT_VT='tty'
if [[ ${CURRENT_VT:5:1} = "p" ]]; then
    export VT="X";
else
    export VT=${CURRENT_VT:${#CURRENT_VT} - 1};
fi
    
por 27.01.2013 / 23:58