我有一个脚本,当我以自己的身份在命令行上运行它时,它可以完美运行,但是当脚本由 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 ...
:最后在该环境中运行所需的命令。不再需要使用绝对路径,因为我们现在有一个最小环境。