systemctl --user
デスクトップユーザーにとってはうまくいくようです。
dev@dev-VirtualBox:~$ systemctl --user > /dev/null
dev@dev-VirtualBox:~$ echo $?
0
しかし、www-dataユーザーとして同じコマンドを実行すると、予期しない応答がありました。
dev@dev-VirtualBox:~$ sudo su www-data -s /bin/bash
www-data@dev-VirtualBox:~$ systemctl --user > /dev/null
Failed to connect to bus: No such file or directory
www-data@dev-VirtualBox:~$ echo $?
1
ここでどのようにアクティブにしますかsystemctl --user
?
Ubuntu 16.04実行
ベストアンサー1
これユーザーインスタンスごとsystemdはログインプロセス(PAM)のHookから始まり、pam_systemd
通常の仮想/実際の端末ログインとSSHなどを介したリモートログインに使用されます。
ログインしていません。 特権を強化しています。既存のログインセッションそしてsudo su www-data
。 (しかしこれは重複しています。スーパーユーザーとしてコマンドを実行することなくsudo -u www-data
すぐに開始されますwww-data
。)まだフックを呼び出していません。
したがって、www-data
systemdのユーザー固有のインスタンスはまだ起動されておらず、systemctl --user
会話したい項目が見つかりません。
手動で起動できます。
%sudo install -d -o www-data /run/user/`id -u www-data` % sudo systemctl start user@`id -u www-data`
(間違った順序で実行した場合は、サービスを停止して正しい順序で実行してください。間違った順序で実行すると、最終的に空のランタイムディレクトリが発生し、D-Busや他のソケットファイルがありませんが、サービスは実行中です。クライアントとは絶対に通信しませんではありません)。
1つのトリッキーなことは、別のアカウントの権限でデスクトップバスクライアントプログラムを実行するときに別のアカウントのデスクトップバスエージェントと通信できるDBUS_SESSION_BUS_ADDRESS
ように変数を変更する必要があることです。systemctl
% sudo -u www-data DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/`id -u www-data`/bus systemctl --user
これが簡単な方法です。より洗練されたアプローチは、フックがsudo
呼び出されるようにPAM設定を調整することですpam_systemd
。ただし、XDG_RUNTIME_DIR
特に環境変数に関して望ましくない副作用がある可能性があります。発生した効果に耐えることができると確信している場合にのみ、このpam_systemd
回避策を試してくださいsudo
。
追加読書
- ジョナサンデボインポラード(2014)。ユーザー権限を削除するためにsuを乱用しないでください。。一般的な答え。
- Lennart Petlinget al。 (2017).
pam_systemd
。システムマニュアルページ。 freedesktop.org.