追加読書

追加読書

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-datasystemdのユーザー固有のインスタンスはまだ起動されておらず、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

追加読書

おすすめ記事