자동 로그인 후 X 시작

자동 로그인 후 X 시작

부팅 후 가상 콘솔에 자동으로 로그인할 수 있습니다. 이제 를 입력하는 대신 X 서버가 자동으로 시작되기를 원합니다 startx. 이전에는 작동했지만 systemd로 전환한 후에는 X가 자체적으로 시작되지 않습니다. ~에 따르면위키 페이지, 나는 내 것을 편집했습니다 ~/.bash_profile:

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

그러나 X는 시작되지 않습니다( startx수동 실행이 작동함).

Wikipedia는 또한 다음과 같이 말합니다.

X는 로그인 세션을 보존하기 위해 로그인이 발생한 동일한 tty에서 항상 실행되어야 합니다. 이는 기본 /etc/X11/xinit/xserverrc에 의해 처리됩니다.

하지만 이 문제를 어떻게 처리해야 할지 모르겠습니다. 내 거 /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

내가 뭘 잘못했나요?

고쳐 쓰다

~/.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

파일이 없고 ~/.Xresources이전에는 필요하지도 않았습니다. 그것은 중요한가?

답변1

XDG_VTNR이 무엇을 의미하는지 잘 모르겠지만 이 스크립트는 저에게 효과적이었습니다.~/.bashrc

(tty3에서 auto-X를 하고 있습니다)

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

또한 "작동하지 않음"을 정의하십시오. 수동으로 시작하면 작동합니까 startx? 그렇지 않은 경우 ~/.xinitrc를 먼저 확인하십시오.

답변2

에서는 ( in 을 사용하여 자동으로 로그인한 후 ) 어느 tty에 있는지 .bash_profile알아낼 수 있습니다 (실제로 X에 있었다면 다음과 같이 보일 수 있습니다: - 아래에서 확인된 내용 입니다 ). 그런 다음 나중에 이 정보를 저장하기 위해 변수를 설정하고 이를 사용하여 X를 시작합니다.getty -a/etc/inittabtty/dev/pts/1pxinit

또한 설정해야 ~/.xinitrc하며 ~/.Xresources시작하기 좋은 곳 은 - 이 모든 것에 대한 매뉴얼 페이지를 확인하는 것 ~/.xinitrc입니다 . xrdb ~/.Xresources몇 가지 예를 찾을 수 있습니다.여기.

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

편집하다

실수로 위의 zsh 코드를 게시했습니다. bash 구문에서는 다음과 같이 보입니다(이를 유지하는 것은 제가 매일 컴퓨터에서 실행하는 zsh 코드보다 테스트가 훨씬 적습니다). 나머지는 변경되지 않습니다.

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

관련 정보