zshを使ってxを起動するには?

zshを使ってxを起動するには?

初めてログインしたときにxを自動的に起動したいと思いますzsh

追加した後

if systemctl -q is-active graphical.target && [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then
  exec startx
fi 

ファイルとして~/.zprofile。ただし、xinitがi3を起動するまで2回ログインする必要があります。

ところで、私はArchを使用します

私の.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

答え1

私は答えが遅れていましたが、同じ問題を偶然発見し、OPと同じであると疑われるユースケースに迅速な解決策を提供したかったのです。明確にすると、これは「テキストモード」を使用してログインした直後にXorgを起動することです。したがって、gdmやlightdmなどのディスプレイマネージャはありません。

あなたがすべきことは、最後に次の行を追加することだけです.zshrc

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

デフォルトでは、Xorgがまだ起動しておらず、tty1にある場合は、Xorgを実行するだけです(迷惑な出力なしで...)。後者は、Xorgが起動時に失敗し、いくつかの設定ファイルを変更する必要がある場合に使用されます(私の考えには非常に便利です...)。

お役に立てば幸いです。

注:Bashでも同じコードを使用できます。

答え2

Qの精神を維持するために少し違う言葉で表現します。

シェルコマンドでXを起動するには?システム起動時にこれをどのように実行できますか?

私はあなたのsystemctlとほとんどの.xinitrcを無視しました。

最も基本的なユーザーコマンドはですxinit。正確に何をしているのか言うのは難しいです。特別な意味と構文を持っています。質問に答えてください:

xinit fvwmx サーバーが起動しました。

基本的にはxinit fvwm -- X :0次のことを意味します。

ウィンドウマネージャを使用して、ディスプレイ「0」からX SERVER「X」を初期化します。fvwm

強力なので非常に複雑でなければなりません。 XサーバーとウィンドウマネージャはTTYをいわゆるDISPLAYに変換します。

only を選択すると、xinit特別な xclock 専用環境が提供されます。 (もちろん、「隠された」デフォルトはありません。man xinitも参照してください。man startxも比較してみてください!)。

もちろんxorg.conf構成が必要です! (GPUカード、x用入力装置)

もちろん、(最小)設定されたウィンドウマネージャが必要です! (fvwm、twm、...)

Xを介して自動的に開始するには、ディストリビューションの計画と交渉がxinit必要です。systemd範囲外ですが、現時点ではそうです。

「最初のログイン時のx開始」は(もっと)正確でなければなりません。実行し続けるxという意味であれば、tty1少なくともその意味は理解できます。特定のシェル(例えば)との接続はあまり見られませんzsh

関連情報