运行由 incron 触发的脚本时,如何将某些内容复制到剪贴板?

运行由 incron 触发的脚本时,如何将某些内容复制到剪贴板?

我有一个脚本,当我以自己的身份在命令行上运行它时,它可以完美运行,但是当脚本由 incron 运行时,将值复制到剪贴板的那行不起作用。基本上,我使用 incron 来监视特定目录中新文件的添加,然后将该文件上传到 FTP 服务器并将 URL 复制到剪贴板。这是当脚本由 incron 运行时失败(似乎什么都不做)的行:

echo -n $URL | xclip -selection clipboard

我猜想 incron 无法像我作为登录用户一样访问剪贴板,但我不知道该怎么办。任何帮助都将非常有帮助。

答案1

xclip是一个需要环境变量(如$XAUTHORITY和 )$DISPLAY才能与 X11 服务器通信的应用程序。您可以创建一个如下所示的 cronjob:

/bin/su your_username -c "export XAUTHORITY='/home/your_username/.Xauthority'; export DISPLAY='$(strings /proc/$(pgrep -n Xorg)/environ | awk -F== '$1 ~ "DISPLAY"{print $2}')'; echo -n "message" | xclip -selection clipboard"

使用您自己的用户名而不是your_username。这是一行很长的命令,但cron不接受多行作为 cronjob 条目。但是,它的作用如下:

  • /bin/su your_username:它切换用户
  • -c "...":并运行引号中的命令
  • export XAUTHORITY='...';:首先我们需要$XAUTHORITY变量
  • export DISPLAY='...':和$DISPLAY变量,这主要是:0,但如果没有,我们可以从Xorg进程的环境中获取变量
  • echo ... | xclip ...:最后在该环境中运行所需的命令。不再需要使用绝对路径,因为我们现在有一个最小环境。

相关内容