我正在使用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
在终端中运行命令时,它会要求输入密码。但是,当在桌面条目中使用它时,默认情况下无法提供密码。但是,要使用桌面条目以超级用户身份运行应用程序,可以采用以下方法。
使用
Terminal
钥匙:这
Terminal
键允许应用程序在终端中执行,即在Exec
会像在打开新终端窗口中执行的那样运行,并允许用户输入密钥。Terminal=true
但是此方法有一个问题,因为它打开了额外的应用程序,即终端窗口,它会导致额外的RAM和CPU周期消耗。
使用
pkexec
:另一种方法是使用
pkexec
。pkexec
打开图形窗口以提供密码。但它不允许以其他用户身份运行 X11 应用程序,因为未设置$DISPLAY
和环境变量(参考:$XAUTHORITY
Radu Rădeanu 的回答)。但是,由于它不是外壳,因此不会在桌面条目中扩展变量。
Exec=sh -c 'pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY /path/to/executable'
您可以使用
bash
或任何受支持的外壳bash
。但这将创建一个SH或BASH过程,该过程将等待应用程序退出,从而消耗一些内存。
编辑
/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