基本上我是通过 SSH 会话远程执行这个脚本的。它在 Linux Mint 上运行良好,但在 Debian (7.5) 上运行不佳。看起来导出显示或 nohup 命令不起作用,但我不确定如何尝试测试它。谁能看出这有什么问题吗?
#!/usr/bin/env bash
mount -t cifs //10.50.18.114/Presentation -o 'username=Administrator,password=***,sec=ntlm' /mnt/share
pkill soffice.bin
cp -v /mnt/share/Pres.ppt /home/kyle/Documents
chmod 777 /home/kyle/Documents/Pres.ppt
export DISPLAY=":0"
nohup libreoffice --norestore --nolockcheck --show /home/kyle/Documents/Pres.ppt &
sessionid="$(pidof -s sshd)"
kill $sessionid
exit
编辑:这与提供的“重复”链接中显示的问题不同,我使用了该线程中的信息,但它不起作用。
回答评论:我有两台独立的机器。演示PC本地保存了上述脚本。我通过 SSH 远程执行此脚本,我在每个阶段之间放置了 echo 命令,看起来好像它一直执行到最后(我实际上注释掉了kill sessionid),但演示文稿上没有显示演示文稿个人电脑。如果我以 root 身份在本地执行该脚本,则该脚本可以工作(需要 root 才能使用 mount 命令)。
我看到的唯一错误是:
(soffice:3747):GConf-警告 **:客户端无法连接到 D-BUS 守护程序:未收到回复。可能的原因包括:远程应用程序未发送回复、消息总线安全策略阻止回复、回复超时或网络连接中断。 GConf 错误:没有运行 D-BUS 守护进程
但是,无论是在本地运行还是通过 SSH 运行,我都会收到此错误,因此我认为这不是问题所在。我仍然相信这是 EXPORT 和 nohup 命令的问题,但我不知道如何有效地进行故障排除。
编辑2:当我使用“kyle”帐户进行 SSH 时,它实际上可以工作,似乎通过 SSH 使用 root 进行连接无法连接到“kyle”的本地显示,因为它是不同的用户名。我将努力寻找解决方案。
答案1
如果您想在图形会话中远程启动程序,您需要设置的不仅仅是展示环境变量。你应该至少设置权威和DBUS_SESSION_BUS_ADDRESS。其他最好设置的变量是 XDG_* 变量,例如XDG_RUNTIME_DIR,XDG_SEATETC。
您可以通过运行以下命令来找出它们的值:
PID_OF_SOME_GUI_PROGRAM=`pidof soffice.bin` # before you pkill it
strings /proc/${PID_OF_SOME_GUI_PROGRAM}/environ | grep XAUTHORITY
如果您使用 XFCE,您还可以执行以下操作:
PID_OF_SOME_GUI_PROGRAM=`pidof xfce4-session`
(对于 GNOME,可能是gnome-session
)
答案2
根据“EDIT 2”中的信息发现,我决定使用 plink 单独执行脚本的挂载部分。 plink 将与计算机建立 3 种不同的 SSH 连接: 1. 自动接受指纹 2. 以 root 身份挂载共享 3. 运行主脚本以标准用户身份复制并启动演示文稿。
Windows 端的 plink 脚本如下所示:
echo y | plink -ssh [email protected] "exit"
plink -ssh [email protected] -pw password /home/kyle/Desktop/mount.sh
plink -ssh [email protected] -pw kyle /home/kyle/Desktop/restart-pres.sh
这可能不是最有效的解决方案,但它适合我的情况。