編集する

編集する

このスレッドで質問があります。sudoersに入力されたパスをダブルクリックしてbashスクリプトを実行するには?sudoファイルに権限を付与することは安全ではないという説明を聞いたので、ファイル自体に権限を付与せずにscript.shファイルをダブルクリックする方法を見つけることにしました。script.shsudo安全を確保し、

私はDebian 12とKDE Plasmaデスクトップ環境を使用しています。コマンドを実行するには、sudo sh /path/to/script.sh端末に移動してを入力してからsudo sh /path/to/script.shパスワードを入力する必要があります。ユーザーインターフェイスでダブルクリックしてファイルを実行できるファイルが必要なので、ダブルクリックsudo sh /path/to/script.shしてパスワードを入力するだけです。

sudoスクリプトには、ip tuntap add devまたはでのみ使用できるいくつかのコマンドがありますroute add。どうすればいいですか?

ありがとうございます。

ベストアンサー1

編集する

より多くの情報を提供するためにコメントを編集したので、完全な回答を提供できます。 KDE Plasmaを実行している友人に確認してみたところ、デフォルトの動作は、実行可能ビットが設定されていると仮定して、デスクトップでスクリプトをダブルクリックするとスクリプトが実行されるということです。端末で実行されないため、スクリプトは独自の端末を作成する必要があります。これを念頭に置いて、指示は次のとおりです。

  1. スクリプトにshebangを追加する

#!/bin/shスクリプトの先頭にこの行を追加してください。これは、システムがファイルを実行するために使用するシェルを通知します。

  1. ファイルを実行可能にする

ファイルを右クリックpermissionsし、下のチェックボックスを選択しますexecutable。またはchmod +x /path/to/script.sh

  1. sudoスクリプト内で各コマンドにプレフィックスを追加します(必要な場合)。

  2. 端末でスクリプトが開いていることを確認してください。

スクリプトの先頭に(しかしshebangの後ろに)次のコードを追加するだけです。

test "$IN_TERM" || {
    export IN_TERM=1
    konsole --hold -e "$0"
    exit 0
} && true

KDEの基本端末であるKonsoleを使用します。この--holdフラグを使用すると、スクリプトが完了しても端末が開いたままになり、正しく実行されたことを確認できます。

それはすべてです。すべてがうまくいくでしょう!

はい

すべてがどのように見えるかについてのおおよそのアイデアを提供するために、私のシステムに同様のスクリプトがあります。ネットワーク設定は変更されていませんが、ノートブックの充電動作は変わりましたが、一般的なアイデアは似ています。

#!/bin/sh

set -x  # Print all commands before running them
set -e  # Exit on first error

test "$IN_TERM" || {
    export IN_TERM=1
    alacritty --hold -e "$0"  # I use alacritty as my terminal.
    exit 0
} && true

sudo -v  # Ask for password, but don't run any command

# Subsequent invocations of `sudo` won't ask for password
sudo tpacpi-bat -s ST 1 0
sudo tpacpi-bat -s SP 1 0

echo 'Done!'

安全

コメントにsudoスクリプト自体を置くことについて懸念していると述べました。私はセキュリティ研究者ではありませんが、これは完全に正確で安全であると確信しています。sudoユーザーはパスワードの入力を求められます。システム上の他のユーザーまたはユーザーの権限で実行される悪意のあるプログラムは、いかなる方法でもスクリプトを悪用することはできません。スクリプトを置くsudoことは眉をひっくり返す可能性がありますが、セキュリティとはまったく関係のない理由があります(たとえば、スクリプトをsudo他の人に配布する予定の場合は、誰もがスクリプトをインストールしていないため、スクリプトを配置するのが問題になる可能性がありますsudo) 。

古い回答

コメントからわかるように、どのディストリビューション/デスクトップ環境を使用しているかを教えてくれないので、実際には役に立ちません。

しかし、いくつかのアドバイスをすることができます。

モバイルスクリプトsudoの内部

sudoこの場合、呼び出しをスクリプト自体に移動する方が良いと思います。スクリプトの先頭に次の内容を追加するだけです。

test "$(id -u)" -eq 0 || {
    sudo sh "$0"
    exit 0
}

別のオプションは、最初のスクリプトを開始する2番目のスクリプトを作成することですsudo。 3番目のオプションは、スクリプトにルート専用コマンドを追加することですsudo。パスワードは一度だけ尋ねます。

実行可能ビット設定

端末で実行すると、chmod +x /path/to/script.shファイルが実行可能になります。/path/to/script.sh代わりに、起動スクリプトを使用して動作しているかどうかをテストできますsh /path/to/script.sh。一部のデスクトップ環境では、スクリプトをダブルクリックしてGUIを介して実行することもできます。

正しいshebang設定

スクリプトが#!/bin/sh(または#!/bin/bash(または#!/usr/bin/env bash)スクリプトがbashのみの機能を使用している場合)で始まることを確認してください。

ディストリビューションの設定アプリを詳しくご覧ください。

セキュリティ上の理由から、ダブルクリック開始スクリプトが無効になる可能性があります。ファイルマネージャまたはデスクトップ環境設定でこのオプションを参照してください。ここ

ファイルを作成します.desktop

上記の方法が失敗した場合は、myscript.desktop次の内容をType含むファイルを作成してCommentフィールドを編集できますExec

[Desktop Entry]
Version=1.0
Type=Application
Name=your_human_friendly_name
Comment=your_human_friendly_comment
Exec=/path/to/script.sh
Terminal=false
StartupNotify=false
Categories=Application;

これで、ファイルをダブルクリックしてスクリプトを実行できます。これをsudoスクリプトに移動する必要があることに注意してください。端末内でスクリプトを実行する必要がある場合は、このTerminalフィールドを変更してください。この方法が機能するには、スクリプトに実行可能ビットが設定されている必要があります。

ファイルのもう1つの利点は、ファイルをまたはに挿入すると、.desktopアプリケーションランチャーを介してアクセスできることです。/usr/share/applications~/.local/share/applications

gendeskあるいは、自動的に.dekstopファイルを生成するツールがありますが、ファイルを手動で作成することもできます。

使用gksudo

目的の動作を達成する方法を見つけましたが、デスクトップ環境が端末なしでスクリプトを実行している場合sudogksudoディストリビューションによって異なる名前を使用し、代わりに使用しますsudo。同じように動作しますが、端末を使用する代わりにGUIパスワード入力ボックスを作成します。

スクリプトが独自の端末を起動できるようにする

対話型以外の理由でユーザーに出力を表示するなど、端末でスクリプトを実行する必要がある場合は、スクリプトの先頭sudo(shebangの後ろ)に配置して、常にスクリプトが実行されるようにすることができます。ターミナルのターミナル:


test "$IN_TERM" || {
    export IN_TERM=1
    alacritty --hold -e "$0"
    exit 0
} && true

上記のコードスニペットはalacritty私が好む端末を使用しています。使用中の端末に変更します。また--hold-eフラグに注意してください。また、敏捷性によって異なります。-e実際、-c他のほとんどの端末では。

使用rofi

これはあなたの質問に対する答えではありませんが、役に立つと思います。すばやく起動できる必要があるさまざまなスクリプトがある場合は、この点を考慮してくださいrofi。これにより、いつでも起動する準備ができたすべてのスクリプトの検索可能なメニューを持つことができます。この方法でrofiを使用するには、まずrofi_launch.sh次のスクリプトを作成する必要があります。

#!/bin/bash

if [ -z "$1" ]; then
    ls /path/to/where/you/store/your/scripts
else
    FILE="/path/to/where/you/store/your/scripts/$1"
    killall rofi
    "$FILE" & disown
fi

その後、rofiを実行するとrofi -show RUN:/path/to/rofi_launch.sh(デスクトップの設定でキーボードショートカットにバインドできます)、スクリプトを実行できるメニューが表示されます。

おすすめ記事