web-dev-qa-db-ja.com

自動ログイン後にXを起動

起動後に仮想コンソールへの自動ログインが機能しています。ここで、startxと入力する代わりに、Xサーバーを自動的に起動させます。これは以前は機能していましたが、systemdに切り替えた後、Xは起動しませんでした。 wikiページ によると、私は~/.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ファイルがなく、以前は必要ありませんでした。大切ですか?

5
user905686

XDG_VTNRが何を意味するのかわかりませんが、このスクリプトは機能します。次の行を_~/.bashrc_に追加します

(私はtty3でauto-Xを行います)

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

「機能しない」も定義します。startxを手動で起動すると機能しますか?そうでない場合は、最初に〜/ .xinitrcを調べてください。

6
daisy

.bash_profileでは、(getty -a/etc/inittabを使用して自動ログインした後)ttyを使用しているttyを確認できます(実際にXを使用している場合は、 /dev/pts/1-pチェックは以下のとおりです)。次に、この情報を格納する変数を設定します。後で、それを使用してxinitでXを起動します。

~/.xinitrc~/.Xresourcesも設定する必要があります。 ~/.xinitrcの良いスタートはxrdb ~/.Xresourcesです-これについては、manページを確認してください。いくつかの例 here を見つけることができます。

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
0
Emanuel Berg