![自动登录后启动X](https://linux22.com/image/28398/%E8%87%AA%E5%8A%A8%E7%99%BB%E5%BD%95%E5%90%8E%E5%90%AF%E5%8A%A8X.png)
我可以在启动后自动登录到虚拟控制台。现在我希望 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 -a
in自动登录后/etc/inittab
)您所在的 tty tty
(如果您实际上在 X 中,它可能如下所示:/dev/pts/1
- 这就是p
下面检查的内容)。然后,设置一个变量来存储这些信息;稍后,用它来启动xinit
X。
您还应该设置~/.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