我希望zsh在第一次登录时自动启动x。
在我加入之后
if systemctl -q is-active graphical.target && [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then
exec startx
fi 文件~/.zprofile。但是,在xinit启动i3之前,我需要登录两次。
顺便说一下,我用的是拱门
我的.xinitrc看起来就像
#!/bin/sh
userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/etc/X11/xinit/.Xresources
sysmodmap=/etc/X11/xinit/.Xmodmap
# merge in defaults and keymaps
if [ -f $sysresources ]; then
xrdb -merge $sysresources
fi
if [ -f $sysmodmap ]; then
xmodmap $sysmodmap
fi
if [ -f "$userresources" ]; then
xrdb -merge "$userresources"
fi
if [ -f "$usermodmap" ]; then
xmodmap "$usermodmap"
fi
# start some nice programs
if [ -d /etc/X11/xinit/xinitrc.d ] ; then
for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do
[ -x "$f" ] && . "$f"
done
unset f
fi
twm &
xclock -geometry 50x50-1+1 &
xterm -geometry 80x50+494+51 &
xterm -geometry 80x20+494-0 &
# exec xterm -geometry 80x66+0+0 -name login
xrandr --output DP-3 --same-as LVDS-1
exec i3发布于 2022-08-10 09:26:53
响应非常晚,但只是偶然发现了同样的问题,并想为我的用例提供一个快速的解决方案,我怀疑它与OP的一样。不过,为了澄清一下,这是为了在使用"text模式“登录之后立即启动Xorg。因此,没有像gdm或lightdm这样的显示管理器。
您只需要将这些行添加到.zshrc的末尾:
if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
exec startx &>/dev/null
fi本质上,所有这些都是运行Xorg (没有所有恼人的输出.)如果它还没有启动,如果您在tty1上。后者是为了防止Xorg在启动时失败,您需要更改一些配置文件(在我看来非常有用)。
希望这能有所帮助。
注意:您可以在bash中使用相同的代码。
发布于 2019-10-17 14:42:39
我稍微修改了一下,希望保持Q的精神:
如何通过shell命令启动X?如何在系统启动时完成?
我忽略了您的系统and和大部分的.xinitrc。
最基本的用户命令是xinit。很难说它到底做了什么。它有一个特殊的语义和语法。回答问题:
xinit fvwm确实启动了x服务器。
它默认为xinit fvwm -- X :0,这意味着:
用窗口管理器fvwm初始化显示"0“的X服务器"X”
它必须如此复杂,因为它是强大的。X服务器和窗口管理器将TTY转换为所谓的显示。
如果您只使用xinit,您将得到一个特殊的xclock专用环境。(当然,没有任何“隐藏”默认值。见人心。也是曼·施塔克斯。(比较!)
当然,您需要配置xorg.conf!(gpu卡,x输入装置)
当然,您需要一个窗口管理器,(最低限度)配置!( twm,twm,.)
要通过xinit自动启动X,需要与systemd和您的发行版进行一些规划和协商。超出了范围但只是暂时的。
“在第一个登录时启动x”需要(非常多)更精确;如果它意味着让x在tty1上运行,我至少可以理解它的含义。我看不出与像zsh这样的shell有多大的联系。
https://unix.stackexchange.com/questions/547299
复制相似问题