这是关于对话框的一个问题。
我想在会话开始时和会话结束后显示一个对话框n分钟不活动。我决定使用zenity
和xautolock
。我已成功从命令行 (bash) 调用两者。
zenity --text=text --warning
xautolock -time 15 -locker "zenity --text=sometext --warning"
然而,也存在一些限制:
- 文本包含多个单词。如果包含空格,
zenity
则仅显示第一个单词,并尝试将其他单词解析为参数。为了解决这个问题,我将文本括在双引号 ("
) 中,但这会导致: xautolock
将整个zenity
命令作为其-locker
参数的选项。该命令有多个单词,所以我必须将其括在引号中。但它原本就有引号,因此它与引号内的引号相冲突。- 我希望警报文本可自定义,因此我使用
--text="$(cat .filename)"
。
所以现在我拥有的是:
zenity --text="$(cat .filename)" --warning
xautolock -time 15 -locker "zenity --text=\"$(cat .filename)\" --warning"
如果我在终端会话(bash)上分别运行每一行,他们确实工作。光标停滞以等待进程终止,但对话框按我需要的方式显示。
现在我需要它自动启动,无需用户干预。我做了:
- 我把每一行分别放在启动应用程序列表。它们不会显示所需的文本,而是显示$(猫在对话框中。
- 我
command.sh
在我的文件夹中创建了一个文件~
,粘贴了这两行,并使其可执行。 - 从命令行运行脚本是可行的。
- 将其
~/command.sh
作为启动应用程序的条目不起作用。什么都没发生,什么都没显示,没有错误消息,什么都没有。根据这个答案,它应该可以工作。 - 放置 /home/username/command.sh 确实有效,但这个用户只是一份“skel”,被复制到来宾用户登录时创建的文件夹,因此用户名文件夹将是“guest-RANDOMSTRING”,我无法将其设置为启动应用程序条目。由于权限原因,我也无法将其设置为“skel”用户。
答案1
尝试将它们放入脚本中,并将该脚本添加为启动应用程序中的条目。使用环境变量和~
桌面文件已经够难的了,更不用说完整的命令替换了,正如桌面文件似乎没有正确使用 $PATH和如何在图标启动器中包含环境变量。
答案2
事实证明,启动应用程序列表上的每个条目都被创建为一个.desktop
文件~/.config/autostart$
。
正如两者所提到的@muru 的回答和他链接的问题的答案,.desktop
文件不会像 shell 那样展开波浪符号。它们似乎也没有 ${HOME} 变量。
因此解决方案是添加以下行文件~/.pam_environment
:
PATH DEFAULT=${PATH}:${HOME}/scripts
然后将我的.sh
脚本放在~/scripts
文件夹中,并将script.sh
(无前缀)添加到启动应用程序列表中。