1つのプロンプトpkexec - 2つのコマンド

1つのプロンプトpkexec - 2つのコマンド

pkexec認証で2つのコマンドを使用する必要がある場合は、どのようにプロンプ​​トを表示できますか?私の簡単なサンプルスクリプト:

pkexec virsh net-start default;
pkexec "/home/user/program";

私はLinux環境が初めてです。ありがとう:)

答え1

1つのプロンプトを使用して複数のコマンドを簡単に実行できるので、sh -c あなたの場合は次のように書くことができます。

pkexec sh -c 'virsh net-start default && /home/user/program'

源泉

この方法は、コマンドラインとデスクトップファイルで効果的でした。スクリプトで動作するかどうか教えてください。

答え2

前の答え: スクリプトからpkexecを削除できますか?次のスクリプトを生成し、コードを貼り付けて(pkexecを使用せずに)、スクリプトでpkexecを介して実行してみてください。あなたのスクリプト:#!/bin/bash pkexec ./new_script 新しいスクリプト: #!/bin/bash your command:

編集:新しい答え

@Thrigと話をした後、あなたがすることは次のとおりです。二重認証を要求せずに(一度だけ)、root権限で両方のプログラムを実行しようとしています。両方のプログラムは「virsh」と「gnome-boxes」です。以前の解決策(上記)は問題ありませんでしたが、この場合はそうではありませんでした。 「sudo」の使用を検討していることを知らせるために@Thrigに手紙を送りました。 「pkexec」と「sudo」を一緒に使うとどうでしょうか? 「/etc/sudoers」が正しく完了したら、スクリプトで「sudo」コマンドを使用するときに認証する必要はありません。私はあなたのアイデアをトリミングすることができます。気に入って欲しいです。すべてを段階的に説明します。

1.3 つのスクリプトを作成します。

a) main.sh - 接続設定、切断、gnome-box の実行。すべてをルートに

b) net.sh - コマンドの実行

c) die.sh - コマンドの実行

ㅏ)

#!/Bin/bash
sudo /home/ham/..your..path../net.sh && pkexec /usr/bin/gnome-boxes;
sudo /home/ham/..your..path../die.sh;
exit

なぜ?オペレーターの説明

雨)

#!/Bin/bash
virsh net-start default

氏)

#!/Bin/bash
virsh net-destroy default

2.スクリプトがb)c)root権限で実行されるように、「sudoers」ファイルを編集します。

$ sudo nano /etc/sudoers

%sudo ALL=(root) NOPASSWD: /home/..your..path../net.sh
%sudo ALL=(root) NOPASSWD: /home/..your..path../die.sh 

三。スクリプト b) c) の所有者を root に変更します。

$ sudo chown 700 /home/ham/..your..path../net.sh
$ sudo chown 700 /home/ham/..your..path../die.sh;

4.polkitでgnome-boxのルールを作成します。答えは「何をすべきですか?」です。simple_polkit_rule

5.ファイル編集:

  • org.gnome.Boxes.service

    Exec=/home/..your..path../start.sh

  • org.gnome.Boxes.desktop

    Exec=/home/..your..path../start.sh

6.今すぐショートカットアイコンをクリックしてgnome-boxesアプリケーションを起動します。完全な。 gnome-boxesアプリケーションを閉じるときに自動的に接続を閉じる機能を直接追加しました。

答え3

多くの人が同様の問題に直面し、su権限でGUIを実行したいと考えていました。最近、ターミナルウィンドウを開く問題について見てきました。検索後、これは私のために働いた。

  • 私の使用法は、別名を使用して用語および/またはSUを使用する〜/ binからGUIおよび/またはシェルスクリプトを呼び出すことです。

「su」または「sudo」のGUI特権の昇格は推奨されず、実行中の作業のリスクを理解せずに実行しないでください。


  • pkexecは次のように取得できます。

    sudo apt install policykit-1
    

  • このファイルの下部を次のように編集します。

    sudo nano /usr/share/polkit-1/actions/org.freedesktop.policykit.policy
    
  • あなたの外観は次のとおりです。

    <action id="org.freedesktop.policykit.lockdown">
    
      <description>Configure lock down for an action</description>
    
        <message>Authentication is required to configure lock down policy</message>
    
      <defaults>
    
        <allow_any>auth_admin</allow_any>
    
        <allow_inactive>auth_admin</allow_inactive>
    
        <allow_active>auth_admin</allow_active>
    
      </defaults>
    
      <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/pklalockdown</annotate>
    
    </action>
    

  • 次に、次のことを試してください。

    pkexec gedit 
    

端末にカスタム bin パスを追加します。 - ユーザーのシェルプログラムを保存するのが標準です。

   /home/$USER/bin

または

   ~/bin

*この位置は同じです。 1つ目はファイルのフルパスで、2つ目は略語です。

    /home/$USER/bin
  • $USER $PATH にユーザー/bin を追加するだけです。

    mkdir /home/$USER/bin
    
  • 端末はシェルスクリプトまたはプログラムが次の場所にあることを認識します。

    ~/bin
    

例:

    $/path/to/file.sh 

になる:

    $file.sh

これを.bashrcに追加する

エクスポート PATH=$PATH:$HOME/bin

ここで、「$HOME/bin」は追加するディレクトリです。この変更は一時的なものであるため(シェルの現在のセッションでのみ機能します)、ホームディレクトリにある.bashrcファイルに前の行を追加することで永久に適用できます。

  • 私はシェルスクリプト内でpkexecを使用して複数のプログラムを実行でき、資格情報を一時的に保存するオプションがあるため、GUIアプリケーションに対してこの特権の昇格方法を好みます。

  • その後、~/.bash_aliasesにエイリアスを追加してみます。

    echo 'alias gedit="pkexec gedit"' >> ~/.bash_aliases 
    

/PKEXEC /SU /GUI /GKsu /POLKIT /policykit-1

関連情報