Centosが起動後にログインせずにtui(ncursesプログラム)を表示するようにしたいと思います。ログインプロンプトを表示したくありません。
プログラム機能:ネットワーク構成、再起動、シャットダウン
これを達成する方法はありますか?
答え1
M. Dickeyの体系的な答えは少しあいまいです。以下は、システムオペレーティングシステムの詳細です。
ログインプロンプトを表示するサービスは、ログインサービス[email protected]
などのテンプレートのインスタンスです。これらのエンドデバイスから独自のサービスと交換するには、2つのことを行う必要があります。[email protected]
tty6
サービス定義を作成します。
これは非常に簡単です。
# /etc/systemd/system/[Eメール保護] [単位] 説明=%Iのカスタムユーザーインターフェース ドキュメント=https://unix.stackexchange.com/a/318336/5132 競合=getty@%I.service 前=getty.target [提供する] ExecStart=/usr/local/sbin/my-custom-user-interface 標準入力=tty 標準出力=tty 再起動=常に 再開秒= 1 Utmp識別子=%I TTYパス=/dev/%I TTYリセット=はい TTYVを壊す=はい TTYVT割り当て解除=はい SIGHUP=YES 送信 [インストールする] WantedBy =マルチユーザー。ターゲット
これは金型カーネル仮想端末デバイスの名前をテンプレートパラメータとして使用してインスタンス化されるサービス単位。
起動時にサービスが自動的に開始されることを確認してください。
これがより複雑な部分です。
まず、決定する必要があります。どの実行するカーネル仮想端末装置。これにはいくつかの情報が適用されます。
- Fedoraの世界では、2008年以来、GUIは最初のカーネル仮想端末デバイスを使用しています
tty1
。その仮想端末デバイスを使用せずにGUIを無効にする(または手動で調整)、選択する必要があります。 NAutoVTs
systemdのlogindは、設定ファイルに設定されている最大値まで、カーネル仮想端末からログインサービスの起動を要求しようとしますlogind.conf
。これがtty1
デフォルトですtty6
。- これは
tty7
Fedoraの世界を自由にします。しかし、Debianの世界では、Debianは現在システムオペレーティングシステムですが、グラフィカルユーザーインターフェイスが使用されていますtty7
。 Debian への移植を検討することもできます。 - システムの世界では、カーネル仮想ターミナル#6を「常に存在する」ログインプロンプトにしようとしていますControl。AltF6
あなたが選択すると仮定しますtty5
。
ユーザーがカーネル仮想ターミナル#5に切り替えるたびに、オンデマンド起動(別名[email protected]
)でログインを停止する必要があります。設定を6から4に下げるだけ[email protected]
です。NAutoVTs
logind.conf
システムの起動時にサービスが自動的に開始されることを確認する必要があります(例:「アクティブ化」)。
システム制御の有効化[Eメール保護]
代替
これを行う他の方法があります。
テンプレート以外のサービス
(たとえば)に置き換えて、最終的なデバイス名をデバイスに[email protected]
直接配線する代わりに。my-terminal-ui.service
%I
tty5
tty5
.
次のいずれかを使用してください。autovt@tty
窒素自分の名前の代わりに
サービス定義として使用する名前を決定します。これはテンプレートのインスタンス化をオーバーライドします。/etc/systemd/system/[email protected]
[email protected]
このアプローチの利点は、サービスをアクティブにすることにまったく気にする必要がなく、NAutoVTs
ユーザーがカーネル仮想ターミナル#5に切り替える限り、ログイン状態を維持して要求に応じてサービスを開始できることです。
欠点は、オンデマンド起動メカニズムが設計されていることです。ログインプロセスを実行しない未使用のカーネル仮想端末で。したがって、システムの起動時にサービスが実行されず、カーネル仮想ターミナル#5を初めて有効にしたときにのみ実行されます。この種のオンデマンドスタートアップはあなたが望むものではないかもしれません。カスタムシステムの他の部分では、サービスが期待できます。すでに実行中たとえば、ブートローダから始めます。
編集するgetty@tty
窒素
人々は仕事がどのように行われているかにかかわらず、/etc/ttys
仕事がどのように実行されるかに応じて/etc/inittab
変化を見るでしょう。[email protected]
彼らは次のコマンドを実行します
システム制御エディタ[Eメール保護]
上書きステートメントを追加します。
[提供する] #この空白ジョブは印刷エラーではありません。 実行開始= ExecStart=/usr/local/sbin/my-custom-user-interface
これにはいくつかの問題があります。
サービスを提供するそれはゲッティです{ a
、min
、f
}getty
プログラムを実行しないことは、保守が容易なアイデアではありません。数年後、ここで行ったことを忘れたり、他の人がそのようなシステムの管理を担当したりすると、getty
「getty」サービスが常にユーティリティを実行しているわけではないという事実は明らかではないでしょう。
[email protected]
スペースだとは思わないでください。この端末で実行されているすべて、必要に応じて修正します。これは実際にはシステム的な考え方ではありません。 [email protected]
「getty」プログラムを実行します。まったく異なるプログラムを実行し、「getty」サービスなどを実行しないサービスは、別のサービス定義自体でなければなりません。
さらに:別のサービス定義では、サービスを「getty」サービスと同じものとして定義しないことがあります。上記のサービス定義は、以下を含む「getty」サービスのほとんどの動作を複製します。画面をきれいにする(世界があなたが望むように)。しかし、実際には「ログイン」サービスではなく、サービスを使い続けたくTTYReset=yes
ないかもしれませんし、画面を積極的に消去したくないかもしれません。utmpx
さらに、個々のサービス定義は後で変更するのがより簡単です。上記のテンプレートを使用するとtty5
(満足していない場合)、変更するのはtty8
簡単です。tty8
onの代わりにインスタンス化するだけですtty5
。ローカルのカスタムセットを元に戻して[email protected]
から再作成するのは少し難しいかもしれません[email protected]
。
autovt@tty5
エイリアスmy-terminal-ui@tty5
[email protected]
これは明らかに編集の論理的な進行です。autovt@tty
窒素エイリアスは次のとおりです。ここからどこから始めても構いません。他に置き換えることができるメカニズムgetty@tty
窒素。
しかし、名前を直接使用するのと同じように、前述のものと同じ欠点もあります[email protected]
。ログインを試みる必要があるからです。ログインサービスを開始しないこれはあなたが望むものではないかもしれません。実際にはどういう意味でも必要です。ここから始めます以下でログインしてください。。
追加読書
答え2
getty
使用するログインプログラムを自分のプログラムに置き換えるだけです。たとえば、私のDebianシステムでは、getty
通話は次の場所にあります/etc/inittab
。
# /sbin/getty invocations for the runlevels.
#
# The "id" field MUST be the same as the last
# characters of the device (after "tty").
#
# Format:
# <id>:<runlevels>:<action>:<process>
#
# Note that on most Debian systems tty7 is used by the X Window System,
# so if you want to add more getty's go ahead but skip tty7 if you run X.
#
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
# Example how to put a getty on a serial line (for a terminal)
#
#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100
# Example how to put a getty on a modem line.
#
#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3
そしてDebianは実際には次のものを使いますagetty
。
NAME
agetty - alternative Linux getty
SYNOPSIS
agetty [-8chiLmnsUw] [-a user] [-f issue_file] [-H login_host] [-I
init] [-l login_program] [-t timeout] port baud_rate,... [term]
そして、以下を使用してさまざまなプログラムを呼び出すことができます。-l
オプション:
-l, --login-program login_program
Invoke the specified login_program instead of /bin/login. This
allows the use of a non-standard login program (for example, one
that asks for a dial-up password or that uses a different pass‐
word file).
専用プログラムは各「tty」で実行できます。これを行う場合は、メンテナンスのためにシステムに直接ログインできることを確認する必要があります。これはシングルユーザーモードでもSSH経由でも可能です。これらgetty
の定義はsshには適用されません。
CentOS7では、systemdを使用すると状況が異なるように設定されますが、最終結果は同じです。ご利用時systemctl list-unit-files
の関連サービスはです[email protected]
。他のサービスと同様に、このサービスもカスタマイズできます。locate
手がかりを得るには、以下を使用します。
/etc/selinux/targeted/modules/active/modules/getty.pp
/etc/systemd/system/getty.target.wants
/etc/systemd/system/getty.target.wants/[email protected]
/usr/lib/systemd/system/console-getty.service
/usr/lib/systemd/system/[email protected]
/usr/lib/systemd/system/getty.target
/usr/lib/systemd/system/[email protected]
/usr/lib/systemd/system/[email protected]
/usr/lib/systemd/system/multi-user.target.wants/getty.target
/usr/lib/systemd/system-generators/systemd-getty-generator
のファイルには/usr/lib/systemd/system/
呼び出しが含まれていますagetty
(CentOSのマニュアルページもあります)。以下を修正できます。
ExecStart=-/sbin/agetty --noclear --keep-baud pts/%I 115200,38400,9600 $TERM
シンボリックリンク/usr/lib/systemd/system/multi-user.target.wants/getty.target
とその宛先にはgetty.target
呼び出しが含まれていませんagetty
。
CentOS6はその間のどこかにあります。マイコンピュータにはCentOS6がありmingetty
ませんsystemd
。マニュアルページから:
MINGETTY(8) Linux Programmer's Manual MINGETTY(8)
NAME
mingetty - minimal getty for consoles
SYNOPSIS
mingetty [--noclear] [--nonewline] [--noissue] [--nohangup] [--nohost-
name] [--long-hostname] [--loginprog=/bin/login] [--nice=10]
[--delay=5] [--chdir=/home] [--chroot=/chroot] [--autologin username]
[--loginpause] tty
DESCRIPTION
mingetty is a minimal getty for use on virtual consoles. Unlike
agetty(8), mingetty is not suitable for serial lines. I recommend
using mgetty(8) for this purpose.
たとえば、次のようにagetty
カスタマイズできます。
--loginprog /bin/login
Change the login app.
構成ファイルで始まります。
# tty - getty
#
# This service maintains a getty on the specified device.
#
# Do not edit this file directly. If you want to change the behaviour,
# please create a file tty.override and put your changes there.
stop on runlevel [S016]
respawn
instance $TTY
exec /sbin/mingetty $TTY
usage 'tty TTY=/dev/ttyX - where X is console id'
tty.override
これにより、に関する情報が見つかります。
はあなたが提供したスクリプトです/etc/init/tty.override
(tty1の自動ログインの例を示し、スクリプトが実行できるアクションのおおよそのアイデアを提供します)。$TTY
ただし、変数が設定されます(/etc/init/start-ttys.conf
この変数が属するinitscripts
パッケージには詳細なドキュメントはありません)。
答え3
だから私はインターネット検索の最後に2つの解決策を見つけました。
https://serverfault.com/questions/323289/replacing-tty-with-a-script-in-centos-6
そして
https://www.centos.org/forums/viewtopic.php?t=2414
最後に、私は次の点を指摘しています。
1) 以下の内容で「/etc/init/launch.conf」を作成します。
start on stopped rc RUNLEVEL=[2345]
stop on runlevel [S016]
respawn
console owner
exec /usr/bin/openvt -c 1 -w -f -- /usr/sbin/setup
この例では、テキストモード設定ツールを実行します。
2) '/etc/init/start-ttys.conf'を編集し、ttyをlaunchに置き換えます。
start on stopped rc RUNLEVEL=[2345]
env ACTIVE_CONSOLES=/dev/tty[1-6]
env X_TTY=/dev/tty1
task
script
. /etc/sysconfig/init
for tty in $(echo $ACTIVE_CONSOLES) ; do
[ "$RUNLEVEL" = "5" -a "$tty" = "$X_TTY" ] && continue
#initctl start tty TTY=$tty
initctl start launch TTY=$tty
done
end script
これが最善の解決策であるかどうかはわかりませんが、動作しており、起動後にインストーラが表示されます。