web-dev-qa-db-ja.com

Ubuntu 16.10でのSudoを使用した起動スクリプト

Sudo/root権限で起動時に/usr/binからスクリプトとバイナリファイルを起動する必要があります。私はこのフォーラムから多くのガイドを試しましたが、何も機能しませんでした(rc.localおよびsystemdスタイル、Upstart)-多分何かおかしいです。私のOSはUbuntu GNOME 16.10。です。

スクリプトは次のようになります

#!/bin/bash
Sudo ./usr/bin/myprogram
Sudo bash /home/USER/script.bash

スクリプトとプログラムの両方が実行可能です。起動時にSudoでそれらを起動する最適な方法がわかりません。

優しくしてください。私は新しいユーザーです。

7
bhunter

GUIを必要としないコマンドラインアプリケーションの場合、それらの呼び出しを/etc/rc.localに配置するだけで十分です。これは既にルートとして実行されているため、Sudoは不要です。以下は、2つの監視スクリプトを開始するために使用する独自の/etc/rc.localの例です。

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/home/xieerqi/bin/batmon.sh &
/home/xieerqi/bin/sh/temperature.sh  &
 exit 0

GUIアプリケーションの場合、別のアプローチをとる必要があります。スタートアップアプリケーションアプリを開き、次のコマンドを追加する必要があります。

bash -c "sleep 10;gksu /usr/bin/my_vpn_program"

これにより、GUIの起動に十分な時間が10秒間与えられ、パスワードダイアログが表示され、パスワードを正しく入力するとコマンドが起動します。事実上、これはミニbashスクリプトです。代わりにpkexecを使用できます。また、pkexecの代わりにgksuが推奨されると言う人もいます。

あるいは、毎回パスワードを入力したくない場合は、ユーザーに認証なしでルート権限でこの特定のコマンドを実行させることができます。そのためには、/etc/sudoersファイルを編集する必要があります。 WARNINGSudo visudoを使用して端末からファイルを編集することをお勧めします。以下は、pm-suspendコマンドで同じ設定を使用する方法の例です。

# Allow using pm-suspend for my user without password
xieerqi ALL = NOPASSWD: /usr/sbin/pm-suspend

この行は、/etc/sudoersファイルの最後に追加して保存する必要があります。設定する各コマンドの先頭にSudoまたはgksuを追加する必要があることに注意してください。したがって、前に示したのと同じbashコマンドを使用する必要があります。

9

解決策はとても簡単なので、見逃しました。 :) rc.localはrootによって実行されるため、ファイル内のSudoはまったく不要です。

言い換えれば、あなたが提案したようにrc.localに入れますが、スクリプトからSudoを省略します。 rc.localはすでにルートとして実行されているため、これらはまったく不要です。

お役に立てれば!

1
anonymous2