一个提示 pkexec - 两个命令

一个提示 pkexec - 两个命令

pkexec有人可以回答我,当我必须使用两个带有身份验证的命令时,如何发出一个提示?我的简单示例脚本:

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

我是 Linux 环境的新手,谢谢:)

答案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”。我之前的(上面)解决方案是可以的,但在这种情况下不行。您写信给@Thrig 表示您正在考虑使用“sudo”。为什么不一起使用“pkexec”和“sudo”呢?正确完成“/etc/sudoers”后,您在脚本中使用“sudo”命令时将不需要进行身份验证。我让自己改进你的想法。我希望你喜欢它。我将一步步描述一切。

1.创建三个脚本:

a) main.sh - 建立连接、销毁连接、运行 gnome-boxes。一切都作为根

b) net.sh - 执行命令

c) die.sh - 执行命令

A)

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

为什么?操作符描述

b)

#!/Bin/bash
virsh net-start default

C)

#!/Bin/bash
virsh net-destroy default

2.编辑“sudoers”文件以使脚本:b) c) 以 root 权限运行:

$ sudo nano /etc/sudoers

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

3.将脚本 b) c) 的所有者更改为 root:

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

4.在 polkit 中为 gnome-boxes 创建规则。答案是:“怎么办?”在这儿: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。最近,我查看了挥之不去的打开终端窗口。搜索后这对我有用。

  • 我的用法是使用别名从术语和/或 ~/bin 中使用 SU 调用 GUI 和/或 shell 脚本。

不建议对“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 路径添加到终端: - 标准是将用户的shell程序存储在

   /home/$USER/bin

或者

   ~/bin

*这些位置相同,第一个是文件的完整路径,第二个是简写

    /home/$USER/bin
  • 只需将您的用户 /bin 添加到您的 $USER $PATH

    mkdir /home/$USER/bin
    
  • 终端现在将识别您的 shell 脚本或程序位于

    ~/bin
    

例子:

    $/path/to/file.sh 

变成:

    $file.sh

将其添加到 .bashrc

导出 PATH=$PATH:$HOME/bin

其中“$HOME/bin”是我假设您要添加的目录。此更改只是临时的(它仅在 shell 的当前会话中起作用),以使其永久添加前一行到位于您的主目录中的 .bashrc 文件中。

  • 我更喜欢这种 GUI 应用程序的权限提升方法,因为我可以在 shell 脚本中 pkexec 来运行多个程序,并且可以选择暂时保存凭据。

  • 然后你可以尝试向 ~/.bash_aliases 添加别名:

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

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

相关内容