这是关于对话框的一个问题。

这是关于对话框的一个问题。

这是关于对话框的一个问题

我想在会话开始时和会话结束后显示一个对话框n分钟不活动。我决定使用zenityxautolock。我已成功从命令行 (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(无前缀)添加到启动应用程序列表中。

相关内容