SystemV init
$ ps wax | grep mingtty $ w
例えば、Vine Linux 4.1の場合、psコマンドで6つの/sbin/mingttyが出てくる。Debian echの場合は/sbin/gettyだ。wコマンドではログイン中のユーザが使っている端末のコンソール番号(tty1等)とユーザが確認できる。とにかく仮想コンソールの数を減らそう。
# vi /etc/inittab # /sbin/init q # ps wax | grep mingtty
これで再起動なしに仮想コンソールの数を減らすことができた。/etc/inittabの編集作業のあとに再起動してもよい。ssh接続して全ての仕事を行うのなら6つの仮想コンソールは1つも使わないので全て無駄だが、トラブル発生の際にキーボードでログインする必要も出てくるだろう。そのため、1つ以上の仮想コンソールは残しておくべきだと思う。/etc/inittabの編集では、/sbin/mingttyの含まれる行(6行)の内の下から5行をコメントアウトする。全てコメントアウト(仮想コンソールの数を0にする)すると、マシンにつながっているキーボードからログインできなくなる。マシンに直接つながっているキーボードとディスプレイを使ってログインしたい場合は仮想コンソールの数を1つ以上残しておく必要がある。ssh接続した場合は仮想コンソールは使えないのでAlt+F2としても仮想コンソールのように切り替えることは出来ない。いつもは仮想コンソール要らないけど、たまにキーボードとディスプレイを使ってログインしたい場合は、必要なときだけシングルユーザモードで起動して、/etc/inittabを書き換えればよい。仕事が終わったら仮想コンソールの数を元に戻しておくことをお忘れなく。漢な人は、仮想コンソールの数を0にして使ってください。僕はssh接続メインのマシンは1個で、キーボードログインメインのマシンでは2個に設定することが多いです。
systemd init
デフォルトだと 6 つの tty が立ち上がるので、この数を1つにする。
設定変更前の状態確認。
$ ps -f -C agetty UID PID PPID C STIME TTY TIME CMD root 414 1 0 14:49 tty6 00:00:00 /sbin/agetty --noclear tty6 linux root 415 1 0 14:49 tty5 00:00:00 /sbin/agetty --noclear tty5 linux root 416 1 0 14:49 tty4 00:00:00 /sbin/agetty --noclear tty4 linux root 417 1 0 14:49 tty3 00:00:00 /sbin/agetty --noclear tty3 linux root 418 1 0 14:49 tty2 00:00:00 /sbin/agetty --noclear tty2 linux root 1379 1 0 14:51 tty1 00:00:00 /sbin/agetty --noclear tty1 linux # systemctl list-units '*getty*' UNIT LOAD ACTIVE SUB DESCRIPTION getty-static.service loaded active exited getty on tty2-tty6 if dbus and logind are not available getty@tty1.service loaded active running Getty on tty1 getty@tty2.service loaded active running Getty on tty2 getty@tty3.service loaded active running Getty on tty3 getty@tty4.service loaded active running Getty on tty4 getty@tty5.service loaded active running Getty on tty5 getty@tty6.service loaded active running Getty on tty6 system-getty.slice loaded active active system-getty.slice getty.target loaded active active Login Prompts LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, i.e. generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. 9 loaded units listed. Pass --all to see loaded but inactive units, too. To show all installed unit files use 'systemctl list-unit-files'.
設定を変更して永続化。設定の永続化を確認するために再起動。
# systemctl disable getty-static.service # systemctl mask getty-static.service Created symlink from /etc/systemd/system/getty-static.service to /dev/null. # systemctl list-unit-files '*getty*' UNIT FILE STATE console-getty.service disabled container-getty@.service static getty-static.service masked getty@.service enabled serial-getty@.service disabled getty.target static 6 unit files listed. # systemctl reboot
再起動後の状態確認。OK。
# ps -f -C agetty UID PID PPID C STIME TTY TIME CMD root 399 1 0 15:13 tty1 00:00:00 /sbin/agetty --noclear tty1 linux # systemctl list-units '*getty*' UNIT LOAD ACTIVE SUB DESCRIPTION ● getty-static.service masked inactive dead getty-static.service getty@tty1.service loaded active running Getty on tty1 system-getty.slice loaded active active system-getty.slice getty.target loaded active active Login Prompts LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, i.e. generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. 4 loaded units listed. Pass --all to see loaded but inactive units, too. To show all installed unit files use 'systemctl list-unit-files'.