这是我的情况。我有一个用 java 执行的 .war,它只在其文件夹中运行:
cd /opt/myappdir/
java -jar myapp.war
注意:它不能像这样工作:
java -jar /opt/myappdir/myapp.war
我已经创建了一个 bash 脚本(sudo /opt/myappdir/run.sh
)来启动这个命令
#!/usr/bin/env bash
cd /opt/myappdir/
java -jar myapp.war
到目前为止一切正常。现在的问题是:
我想从桌面上的快捷方式启动它。这是我的桌面快捷方式,用于启动 myapp war
[Desktop Entry]
Encoding=UTF-8
Version=1.0
Name=MyApp
Comment=Run MyApp
Type=Application
Exec=/opt/myappdir/run.sh
Icon=/opt/myappdir/myapp.ico
Path=/opt/myappdir/
Terminal=false
但由于myapp.war
需要使用 sudo 运行,因此myappdir
我修改了run.sh
脚本,如下所示
#!/usr/bin/env bash
cd /opt/myappdir/
dir=$(dirname $(readlink -m $BASH_SOURCE))
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY QT_X11_NO_MITSHM=1 java -jar myapp.war
为什么要用 来表示dir=$(dirname $(readlink -m $BASH_SOURCE))
?
因为我需要确保myapp.war
正在运行myappdir
为什么要用 来表示pkexec
?
因为双击桌面快捷方式时java
需要运行sudo
出去:
Error: Unable to access jarfile myapp.war
某人这里为类似问题提供了解决方案,但对我来说不起作用。(修改提案:)
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=java -jar 'myapp.war'
Path=/opt/myappdir/
Name=myapp
Comment=myapp
Icon=/opt/myappdir/myapp.ico
我该如何修复我的run.sh
脚本以使其myapp.war
在sudo
内部运行myappdir
并从桌面快捷方式调用它?谢谢
更新
根据某人的解释这里,pkexec
无法在同一目录中运行(我猜这就是它找不到myapp.war
文件的原因)。因此,解决方案可能是运行一个命令,强制它进入目录以运行 java,但我尝试过但失败了