无法在桌面入口中使用 sudo 启动 XAMPP

无法在桌面入口中使用 sudo 启动 XAMPP

我正在使用Ubuntu 18.04。

[Desktop Entry]
Type=Application
Name=XAMPP Control Panel
Version=7.3.0.0
Exec=sudo -i python /opt/lampp/share/xampp-control-panel/xampp-control-panel.py
Encoding=UTF-8
Terminal=false
Comment=Start and Stop XAMPP
Icon=/home/lee/.local/favicon.ico

但是,由于某种原因,它不会在CL上运行。

答案1

在 Ubuntu 等发行版中,默认情况下 root 帐户是禁用的,因此sudo需要使用。sudo在终端中运行命令时,它会要求输入密码。但是,当在桌面条目中使用它时,默认情况下无法提供密码。但是,要使用桌面条目以超级用户身份运行应用程序,可以采用以下方法。

  1. 使用Terminal钥匙:

    Terminal键允许应用程序在终端中执行,即在Exec会像在打开新终端窗口中执行的那样运行,并允许用户输入密钥。

    Terminal=true
    

    但是此方法有一个问题,因为它打开了额外的应用程序,即终端窗口,它会导致额外的RAM和CPU周期消耗。

  2. 使用pkexec

    另一种方法是使用pkexecpkexec打开图形窗口以提供密码。但它不允许以其他用户身份运行 X11 应用程序,因为未设置$DISPLAY和环境变量(参考:$XAUTHORITYRadu Rădeanu 的回答)。

    但是,由于它不是外壳,因此不会在桌面条目中扩展变量。

    Exec=sh -c 'pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY /path/to/executable'
    

    您可以使用bash或任何受支持的外壳bash

    但这将创建一个SH或BASH过程,该过程将等待应用程序退出,从而消耗一些内存。

  3. 编辑/etc/sudoers

    /etc/sudoers某些应用程序(例如XAMPP)需要作为Superuser运行。

    • 要允许所有Sudoer在没有密码的情况下运行该应用程序,请将以下行附加到/etc/sudoers

      %sudo ALL = (root) NOPASSWD: /path/to/application
      
    • 要允许 sudoer 中的特定用户无需密码即可运行应用程序,请附加

      USER ALL = (root) NOPASSWD: /path/to/application
      

      例如:

      kulfy ALL = (root) NOPASSWD: /opt/lampp/manager-linux-x64.run
      

    要通过命令行附加,您可以使用tee使用选项a。例如:

    echo 'kulfy ALL = (root) NOPASSWD: /opt/lampp/manager-linux-x64.run' | sudo tee -a /etc/sudoers
    

    警告:不要覆盖内容/etc/sudoers,否则您将无法执行Sudo操作附加上面的行建议对该文件进行备份。


脚注:要使用 XAMPP 控制面板,应执行 manager-linux-x64.run 而不是 xampp-control-panel.py。前者是一个可执行二进制文件,负责显示 GUI,而 Python 脚本是其中的一部分,即它不是完整的控制面板。

答案2

这是解决方案,感谢@Kulfy

#!/usr/bin/env xdg-open
[Desktop Entry]
Name=XAMPP
Type=Application
Exec=sh -c "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY sudo /opt/lampp/manager-linux-x64.run"
Terminal=false
Icon=/opt/lampp/htdocs/favicon.ico
Terminal=false

相关内容