私のコンピュータはDebian Busterを実行していますが、起動時間が遅くなるようですkeyboard-setup.service
。私が理解しているように、これにはコンソールで使用されるキーボード設定が含まれます。出力はsystemd-analyze blame
次のとおりです。何度も確認してみましたが、いつも似ていますね。
5.549s keyboard-setup.service
5.063s dev-sda2.device
4.140s udisks2.service
3.565s accounts-daemon.service
3.487s console-kit-log-system-start.service
キーボードを起動するたびにキーボードを設定するのに5.5秒かかるのはなぜですか?キーボード設定が遅すぎる必要がありますか?
では、なぜそうなのでしょうか?何をしていますか?無効にしても安全ですか?
そうでなければ、何が間違っていて、どのように解決できますか?
編集する:systemd-analyse critical-chain
graphical.target @17.385s
└─gdm.service @15.588s +1.797s
└─rc-local.service @15.476s +110ms
└─network.target @15.475s
└─networking.service @14.971s +502ms
└─apparmor.service @8.262s +3.147s
└─local-fs.target @8.256s
└─boot-efi.mount @8.000s +255ms
└─local-fs-pre.target @7.971s
└─keyboard-setup.service @2.421s +5.549s
└─systemd-journald.socket @2.420s
└─system.slice @2.417s
└─-.slice @2.186s
答え1
以下を実行して定義systemctl cat keyboard-setup.service
を表示できます。
# /lib/systemd/system/keyboard-setup.service
[Unit]
Description=Set the console keyboard layout
DefaultDependencies=no
Before=local-fs-pre.target
Wants=local-fs-pre.target
ConditionPathExists=/bin/setupcon
[Service]
Type=oneshot
ExecStart=/lib/console-setup/keyboard-setup.sh
RemainAfterExit=yes
[Install]
WantedBy=sysinit.target
したがって、実行されますが存在する/lib/console-setup/keyboard-setup.sh
場合にのみ実行されます/bin/setupcon
。
/lib/console-setup/keyboard-setup.sh
また、非常に簡単です。
#!/bin/sh
if \
[ -x /etc/console-setup/cached_setup_keyboard.sh ] \
&& /etc/console-setup/cached_setup_keyboard.sh
then
:
else
if [ -f /etc/default/locale ]; then
# In order to permit auto-detection of the charmap when
# console-setup-mini operates without configuration file.
. /etc/default/locale
export LANG
fi
setupcon -k
fi
重要性:
- 存在し、エラーなしで実行している場合、
/etc/console-setup/cached_setup_keyboard.sh
スクリプトはスクリプトを実行する以外は何もしません。 - それ以外の
setupcon -k
場合は実行しますが、存在する場合は/etc/default/locale
それを読み取り、LANG変数を最初にエクスポートします。
少なくとも私のシステムには/etc/console-setup/cached_setup_keyboard.sh
存在し、次のようになります。
#!/bin/sh
if [ -f /run/console-setup/keymap_loaded ]; then
rm /run/console-setup/keymap_loaded
exit 0
fi
kbd_mode '-u' < '/dev/tty1'
kbd_mode '-u' < '/dev/tty2'
kbd_mode '-u' < '/dev/tty3'
kbd_mode '-u' < '/dev/tty4'
kbd_mode '-u' < '/dev/tty5'
kbd_mode '-u' < '/dev/tty6'
loadkeys '/etc/console-setup/cached_UTF-8_del.kmap.gz' > '/dev/null'
重要性:
- フラグファイルが
/run/console-setup/keymap_loaded
存在する場合(コンソールキーマップが初期起動initramfsにロードされたことを示す)、ファイルはクリーンアップされ、スクリプトは他の操作を実行せずにエラーなしで終了します。 - それ以外の場合は、最初の6つの仮想コンソールがUTF-8 Unicodeモードで初期化され、キーマップファイルがロードされます。
これに基づいて、次のことを試すことができます。
/etc/console-setup/cached_setup_keyboard.sh
ファイルが/etc/default/locale
破損しているか、通常より時間がかかるコンテンツが含まれていることを確認してください。- 存在しない場合は、
/etc/console-setup/cached_setup_keyboard.sh
上記の例と同様のものを作成できます。 (一部のGUIキーボード設定ツールで作成された可能性があり、使用されているコマンドはより高速になる可能性がありますsetupcon -k
。) - 存在する場合は、
/etc/console-setup/cached_setup_keyboard.sh
一時的に実行不能にし、システムを起動した後でキーボードをテストして、レイアウトが機能しているか、実行パスがsetupcon -k
現在のパスよりも速いかどうかを確認できます。 - 起動して実行して、
KEYMAP=y
initramfsにキーマップをロードし、デフォルトでバイパスするようにして作業を高速化できることを確認してください。/etc/initramfs-tools/initramfs.conf
update-initramfs -u
keyboard-setup.service
答え2
最善のアドバイスは、サービスの開始にかかる時間を制御するために、サービスのタイムアウト制限を設定することです。これは2つの方法で行うことができます。
SERVICETOFIX="keyboard-setup.service"
sudo mkdir -p "/etc/systemd/system/$SERVICETOFIX.d"
sudo echo -e "[Service]\nTimeoutStartSec=10" | tee "/etc/systemd/system/$SERVICETOFIX.d/reduce-timeout.conf"
方法2: 私は個人的にこの方法を好みます。最初に実行し、sudo systemctl edit keyboard-setup.service
エディタに次を追加して保存し、エディタを終了します。
[Service]
TimeoutStartSec=10