
背景
mail-notification
一部のプログラム(およびstalonetray
)が頻繁に停止しているようで、定期的に再起動しようとしています。 NetworkManagerが再接続すると再起動するように設定したいと思います。したがって/etc/NetworkManager/dispatcher.d/
。
スクリプト
以下のようにスクリプトを作成できます。
#!/bin/bash
sudo -u foo_user pkill mail-notificati -x
sudo -u foo_user DISPLAY=:0 mail-notification &
ユーザーとして直接実行するとうまくいきます。ただし、ルートスクリプトから呼び出すと失敗します。パスワードを入力するように求められますmail-notification
。 Gnome キーリングを読み込めません。
foo_user
このプログラムをさまざまな方法でどのように実行できますか?
答え1
2021
簡単に言うと:
他のユーザーでコマンドを実行するには、次のコマンドを使用できます。
runuser -u user -- command
他のユーザーとしてコマンドを実行するためにルートでのみ使用できます。
認証は不要です。
ログメッセージは生成されません。
権限の制限と問題があります。
su - user -c command
すべてのユーザーが利用できます。
ターゲットユーザーとして認証が必要です。またはで
メッセージを作成してください。/var/log/auth.log
/var/log/secure
sudo -u user command
root権限を持つユーザーまたはファイルのユーザーが使用できますsudoers
。
現在のユーザー(あなた)として認証が必要です。またはで
メッセージを作成します。/var/log/auth.log
/var/log/secure
pkexec --user user command
すべてのユーザーが利用できます。
ターゲットユーザーとして認証が必要です。またはで
メッセージを作成してください。またはなどの代替GUIツール。/var/log/auth.log
/var/log/secure
gksu
gksudo
追加情報:
他のユーザーとしてGUIアプリケーションを実行します。
他のユーザーとしてGUIアプリケーションを実行する前に、ターゲットユーザーがモニターに接続できるようにする必要があります。次に、
xhost +si:localuser:user
///を使用してrunuser
アプリケーションを実行し、次を使用して後続の接続をブロックする必要があります。su
sudo
pkexec
xhost
xhost -si:localuser:user
答え2
いつも古いものが使えます数:
man 1 su
このコマンドは、偽装したいユーザーとしてサブシェルを開きます。ルートとしてパスワードを要求せずに使用できます。
su foo_user -c whatevercommandyouwant
スクリプトを通して作業することもできます。
答え3
GUIで起動されていないプロセスでGUIと対話するには、次の環境変数を設定する必要がありますDISPLAY
。返品XAUTHORITY
デフォルトの場所にはなく、多くの最新プログラムの場合は、次のものが必要です。置くDBUS_SESSION_BUS_ADDRESS
。
ただし、問題を解決するより信頼性の高い方法は、NetworkManagerでこれらのプログラムを再起動しないことです。正常に実行するのが難しいことに加えて、ログインするかどうか、他に考慮する必要があるユーザーや他のディスプレイがあるかどうかを心配する必要があります。代わりに、殺すこれらのプログラムを再起動しないでください。通常のセッションでは、直接開始するのではなく、監督者から開始した場合、死ぬと再開されます。私はsystemdにこの機能が含まれていると思います(しかし使用方法がわかりません)。または、専用の監督者プログラムを使用することもできます。監視装置、監督する、…
答え4
読み取り、コピー、インストール
run-as
machinectl
、実行を管理し、グラフィックアプリケーションを実行するための変数を設定するために使用されるBashスクリプトとPythonスクリプト:xhost
dbus
run-as <user> <command>
グラフィカルアプリケーションを実行するには、次の手順を実行します。
run-as -X <user> <command>