背景

背景

背景

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
gksugksudo

追加情報:

他のユーザーへのLinux実行コマンド

他のユーザーとしてGUIアプリケーションを実行します。

他のユーザーとしてGUIアプリケーションを実行する前に、ターゲットユーザーがモニターに接続できるようにする必要があります。次に、
xhost +si:localuser:user
///を使用してrunuserアプリケーションを実行し、次を使用して後続の接続をブロックする必要があります。susudopkexec
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-asmachinectl、実行を管理し、グラフィックアプリケーションを実行するための変数を設定するために使用されるBashスクリプトとPythonスクリプト:xhostdbus

run-as <user> <command>

グラフィカルアプリケーションを実行するには、次の手順を実行します。

run-as -X <user> <command>

引用する

関連情報