「systemctl --global」をどのように使用すればよいですか?

「systemctl --global」をどのように使用すればよいですか?

Systemdにはフラグがあり、--global私のデプロイUbuntuでcatch-22を見つけました。

  • 権限のないユーザーとして実行すると、systemctlにユニットファイルを/etc
  • と変数を設定できないsudoため機能しません。sudo$DBUS_SESSION_BUS_ADDRESS$XDG_*

sudo -E環境を保護すると、機能する場合と動作しない場合があります。セッションroot(仮想コンソールなど)で実行している場合は、確実に機能します。

それを使用する正しい方法は何ですかsystemctl --global

答え1

--globalenable:と一緒に使用すると、グローバルdisableユーザー設定ディレクトリで機能し、すべてのユーザーの将来のすべてのログインに対してユニットファイルをグローバルに有効または無効にします。

このフラグは「グローバル」レベルのサービスをsystemctl --global表し、主に/ユーザー単位で使用されます。systemctl --userenabledisableすべてのユーザーシステムから。

ユニットとは異なり、systemctl --systemアクティブな--globalユニットはそうではありません。スタート個人ユーザーまでログインしたがって、ユーザー単位を「したい」。 (sudo/ はsuこの意味でユーザーを「ログイン」しないことに注意してください。以下の選択肢を参照してください。)

見たらシステムユーザーごとの検索パス、ユーザー以外の人が使用できない一部の「グローバル」ディレクトリが含まれていることがわかりますroot。これらのディレクトリ内のセルは、sudo systemctl --global(すべてのユーザーに対して)または(個々のユーザーに対して)systemctl --user管理できます。

ls -l /usr/lib/systemd/user

ls -l /etc/systemd/user

sudo systemctl --global管理単位でのみ使用文書、主に有効/無効にします。ユーザー単位をグローバルに手動で有効にすると、/etc/systemd/user個々のユーザーのTargets / wantsディレクトリにシンボリックにリンクされます~/.config/systemd/user

ls -l ~/.config/systemd/user

デスクトップシステムには、(パッケージ)インストール中にデフォルトで有効にできるかなりのグローバルユーザーユニットがあります。 「メモリ内」ユニットリストには、作成された一時ユニット/「ファイル」も含まれます。装備そして範囲。たとえば、--type service狭い範囲を使用します。

systemctl --global list-unit-files
systemctl --global list-units

systemctl --global list-units --all

ユーザー単位のファイルリストは--global個人リストと非常によく似ていますが、--user後者は検索パスに(非グローバル)ユーザー固有のディレクトリを含めます。また、見ることができますuser.conf、どこ追加のユーザーディレクトリ構成できます。

systemctl --user list-units
systemctl --user list-unit-files

user.conf現在のユーザーのカスタム追加エントリを含む組織検索ディレクトリの「リアルタイム」リストを表示するには、次のようにします。systemctl show

systemctl --user show --property 'UnitPath' --value

(内のsystemctl --global list-unit-filesアイテムを除外している間にそのアイテムが含まれていることを確認しました。正しくないか、少なくとも一貫性がないと思いますか?)~/.config/systemd/usersystemctl --global list-units


ユーザーユニットは、ユーザーがログインするまでロード/実行されないため、ログインした--global status各ユーザー(自分と他のユーザー)のデバイスステータスを表示できません。

sudo/は実際にはシステムの観点からsu「適切なログイン」を実行しないため、他のユーザーのユニットを管理するために使用しないでください。代わりに見てください--machine、ここで、および@.host現在のシステムを参照するために使用できます。sudo systemctl --user --machine [email protected]

# NOTE: demo status for yourself, but via sudo.
sudo systemctl --user --machine "${USER}@.host" status

すべてのDBusなどの機能を持つ別々のセッションで別のユーザーとして「ログイン」するには、次のようにします。machinectlを起動しますshell。 (これはmachinectl loginシェルも起動しますが、より面倒な「手動」ログインプロセスであることに注意してください。)

# NOTE: demo logging in as yourself, but with a custom/different login shell.
sudo machinectl shell "${USER}@.host" /bin/sh

また、見ることができますloginctl特に、「手動」ログインを必要とせずにenable-linger長期実行サービスを許可します。--user

関連情報