这是关于对话框的问题的后续。
我想在会话开始时和闲置n分钟后显示一个对话框。我决定使用zenity
and 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) 上分别运行每一行,它们就可以工作。光标在等待进程终止时停滞不前,但对话框按照我需要的方式显示。
现在我需要它在没有用户干预的情况下自动启动。我做了什么:
- 我已将每一行分别放在“启动应用程序”列表中。他们不会显示所需的文本,而是在对话框中显示$(cat 。
- 我
command.sh
在我的~
文件夹中创建了一个文件,粘贴了这两行,使其可执行。 - 从命令行运行脚本有效。
- 将其
~/command.sh
作为启动应用程序的条目不起作用。没有任何反应,没有任何显示,没有错误信息,什么都没有。根据这个答案,它应该工作。 - 放置 /home/username/command.sh 确实有效,但这个用户只是一个“skel”,它被复制到登录时创建的来宾用户文件夹,所以用户名文件夹将是“guest-RANDOMSTRING”,我不能设置为启动应用程序条目。出于许可原因,我也无法设置为“skel”用户。
尝试将它们放入脚本中,并将该脚本添加为启动应用程序中的条目。在桌面文件中使用环境变量已经够难了
~
,更不用说完整的命令替换了,正如桌面文件似乎没有正确使用 $PATH和How to include environment Variable in launcher for icon所证明的那样。.desktop
事实证明,“启动应用程序”列表中的每个条目都创建为~/.config/autostart$
.正如@muru 的回答和对他链接的问题的回答所提到的,
.desktop
文件不会像 shell 那样扩展波浪号。他们似乎都没有 ${HOME} 变量。所以解决方案是将以下行添加到文件
~/.pam_environment
中:然后将我的
.sh
脚本放在该~/scripts
文件夹中,并将script.sh
无前缀添加到“启动应用程序”列表中。