Keyboard-setup.serviceが非常に遅く起動します。私にそれが必要ですか?

Keyboard-setup.serviceが非常に遅く起動します。私にそれが必要ですか?

私のコンピュータは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=yinitramfsにキーマップをロードし、デフォルトでバイパスするようにして作業を高速化できることを確認してください。/etc/initramfs-tools/initramfs.confupdate-initramfs -ukeyboard-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

関連情報