自動ログイン後に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

関連情報