Shino's Bar

お家で使うLinuxTux

Linuxに自動ログイン

10 Sep 2006 (初出:3 Mar 2002)

Linuxはマルチユーザーシステムなので、ログイン時にユーザー名とパスワードを入力する。 これって当然のように見えるけれど、 家庭内で使っていて、特に1人で使っていて一般ユーザーでログインするのにパスワード入力しなければならない必然性なんて無いんじゃないか? あるいは家族で使うにしても共用みたいな部分は自動ログインできてもかまわないのではないか。 Mandralle Linux 8 にはこのような自動ログインのシステムがあります。 私が常用しているのはVine Linux 2.1.5ですが、これに自動ログイン機能を加えてみました。電源を入れるとXが立ち上がり、必要ならばアプリケーションの自動立ち上げも可能です。

  1. 参考にしたもの
  2. 準備
  3. RedHat系ではランレベル4が未定義なのでこれを自動ログインに割り当てます。 ランレベル5は従来どおりwdm(あるいはxdm)によるグラフィカルログインに残しておきます。 ランレベル4とランレベル5とで起動デーモンが変わらないように、
    # ntsysv --level 45
    などで自動起動の設定を確認あるいは再設定します。 とくにcanna, Wnnなどの日本語入力フロントエンド、 フォントサーバーのxfsとnetworkの起動は必須となります。

    普段自分が使っているユーザーを自動ログイン設定するならばこのほかに別段の準備は要りません。 共用アカウントを新たに用意するならば、そのユーザーを作成し、いちおうパスワードも設定しておきます。 使用するウインドゥマネージャーや日本語入力フロントエンドなども設定しておきます。 Vineには setwm や setime などのコマンドがありますが、 いったんランレベル5でwdmログインのさいにそれらの設定をするのが簡単でしょう。 ウィンドウマネージャーは私の場合GNOME(+sawfish)としました。

  4. 自動ログインスクリプト (10 Sep 2006 修正)
  5. 今井さんのアイデアを基本にしましたが、'su - $USER' でログイン時の環境設定をさせることと、コンソールのロック設定とpam_consoleによるいくつかのデバイスの所有者変更を加えました。 スクリプトの名前や置き場所はどこでも良いのですが、 /etc/rc.d/rc.autox としました。実行属性を付けておきます。

    
    #!/bin/bash
    # rc.autox 2006-09-10  by Masaki Shinomiya 
    # LICENSE: GPL2
    USER=shino
    DEVS="dsp* mixer* video*"
    for LOCKDIR in /var/run /var/lock;do
        [ -d $LOCKDIR/console ] && break
    done
    for CONLOCKDIR in $LOCKDIR/console $LOCKDIR;do
        grep -q $CONLOCKDIR/console.lock /sbin/pam_console_apply 2>/dev/null && break
    done
    echo -n 1 > $LOCKDIR/console/$USER
    echo -n $USER > $CONLOCKDIR/console.lock
    chmod 600 $LOCKDIR/console/$USER $CONLOCKDIR/console.lock
    if [ -x /sbin/pam_console_apply ] ;then /sbin/pam_console_apply
    else
        cd /dev
        for i in $DEVS ;do 
    	chown $USER $i
        done
    fi
    (exec su - $USER -c /usr/X11R6/bin/startx &> /tmp/x.log) 
    rm -f $CONLOCKDIR/console.lock
    rm -fR $LOCKDIR/console/*
    if [ -x /sbin/pam_console_apply ] ;then /sbin/pam_console_apply -r
    else 
        cd /dev
        for i in $DEVS ;do
    	chown root $i
        done
    fi
    
    以上のスクリプトはVine Linux 2.6/3.2/4.0βでそれぞれ動作を確認しました。 USERとDEVSは適宜変更してください

  6. inittabの編集
  7. /etc/inittab の最初のほうに起動時のランレベルが記述されているので、それを4とします。

    # Default runlevel. The runlevels used by RHS are:
    #   0 - halt (Do NOT set initdefault to this)
    #   1 - Single user mode
    #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
    #   3 - Full multiuser mode
    #   4 - Auto login and startx
    #   5 - X11
    #   6 - reboot (Do NOT set initdefault to this)
    # 
    id:4:initdefault:

    /etc/inittab の最後に ランレベル5でwdmあるいはxdmなどのグラフィカルログインを起動させる記述がありますので、その直前に さきの自動ログインの記述を加えます。

    # Auto login in runlevel 4
    ax:4:once:/etc/rc.d/rc.autox
    これでシャットダウン後にふたたび電源を入れると自動的にログインしXとウィンドウマネージャーが立ち上がります。 この設定ではログアウトするとランレベル3のようにテキストモードで別のユーザにログインできます。ログイン後、startxコマンドにより新しいユーザーでXが立ち上がります。 それはかったるいので新しいユーザーへのログインもグラフィカルにしたいという方は次の設定を。

  8. inittab別解
  9. /etc/inittabの最後の部分を次のようにすると、 最初の自動ログインのあとログアウトするとランレベル5と同じグラフィカルログインとなります。

    # Auto login in runlevel 4
    ax:4:wait:/etc/rc.d/rc.autox
    
    # Run xdm in runlevel 5
    # xdm is now a separate service
    x:45:respawn:/etc/X11/prefdm -nodaemon
    この設定ではランレベル4で自動ログインしたあとログアウトするまでinittabの次の行には進みませんので、これらはinittabの最後に記述するように気を付けなければなりません。

  10. アプリケーションの自動起動
  11. ウィンドウマネージャとしてsawfishを使う場合、 「コントロールセンター」の「スタートアップ」で自動的に起動するアプリケーションを設定することができます。

  12. 一般ユーザーによる停止・再起動
  13. Vine 2.1.x では一般ユーザーでも停止・再起動ができるよう設定されています。 しかしここでわざわざ(一般ユーザーの)パスワードを入力するのは煩わしいだけです。 /etc/pam.d/の中のhaltとreboot, poweroffを次のようにpam_pwdb.soの行をコメントアウトすることで 一般ユーザーによる停止・再起動をパスワードなしで実行できます。

    /etc/pam.d/halt, /etc/pam.d/reboot, /etc/pam.d/poweroff(いずれも同じ)
          #%PAM-1.0
          auth       sufficient   /lib/security/pam_rootok.so
          auth       required     /lib/security/pam_console.so
          #auth       required     /lib/security/pam_pwdb.so
          account    required     /lib/security/pam_permit.so

    pam の新しいバージョンでは 'pam_stack.so' のある行をコメントアウト。

        #%PAM-1.0
        auth       sufficient	/lib/security/pam_rootok.so
        auth       required	/lib/security/pam_console.so
        #auth       required	/lib/security/pam_stack.so service=system-auth
        account    required	/lib/security/pam_permit.so

  14. 電源スイッチによるシャットダウン
  15. 電源の投入で自動ログインできるならばシャットダウンも電源スイッチだけでやりたいですよね。 その設定はこちらをご覧ください。 マザーボードによっては2度押しが必要な場合もあります。

質問、アドバイスは E-mail で マスターまで
Shino's Bar goto [シノバー店内案内] [Linux奮戦記]