自动登录后启动X

自动登录后启动X

我可以在启动后自动登录到虚拟控制台。现在我希望 X 服务器自动启动,而不是键入startx.这之前是有效的,但是切换到 systemd 后,X 无法自行启动。根据维基页面,我编辑了我的~/.bash_profile

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

但 X 不会启动(startx手动执行有效)。

维基百科还指出:

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

在 中.bash_profile,您可以找出(在使用getty -ain自动登录后/etc/inittab)您所在的 tty tty(如果您实际上在 X 中,它可能如下所示:/dev/pts/1- 这就是p下面检查的内容)。然后,设置一个变量来存储这些信息;稍后,用它来启动xinitX。

您还应该设置~/.xinitrc~/.Xresources;一个好的开始~/.xinitrcxrdb ~/.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

相关内容