如何将标准输入发送到后台作业?

如何将标准输入发送到后台作业?

经过多次反复尝试后,我在远程机器上安装了另一个图像查看器(feh),并进行了设置—然后再次尝试了该命令。

feh WARNING: /tmp/feh_stdin_ZwCjv7 - No Imlib2 loader for that file format
feh: No loadable images specified.
See 'man feh' for detailed usage information

display我认为这就是导致 ImageMagick爆发错误的问题。

display: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.

根据https://superuser.com/a/1517417/1106777,该命令失败,因为我display以后台作业的形式启动(&)。

如果进程以 开始,&那么 shell 实际上会重定向其标准输入,/dev/null以避免任何读取尝试。

如果我删除了尾随的&,命令将运行没有任何问题,举个例子:

在职的

ssh beer@laika "DISPLAY=:0 feh -" < <(cat 1.jpeg)

(也)工作

ssh beer@laika "DISPLAY=:0 display -" < <(cat 1.jpeg)

如何将标准输入发送到后台&作业?

答案1

命令

display - && sleep 5 && wmctrl -r ImageMagick -e 0,254,600,800,560

启动display命令,等待它退出,然后sleep 5 && wmctrl -r ImageMagick -e 0,254,600,800,560如果退出状态指示成功则运行。

你可能想要

display - & sleep 5 && wmctrl -r ImageMagick -e 0,254,600,800,560

display从 shell 后台启动然后立即继续执行剩余的命令。

答案2

看起来ssh 上的权限问题

显示和权限

X 程序需要两条信息才能连接到 X 显示器。(请注意wmctrl,即使它访问其他进程的窗口而不是创建自己的窗口,它也是一个 X 程序。)

  • 它需要显示器的地址,通常是:0当您本地登录时,或:10:11您远程登录时,等等(但该数字可能会根据活动的 X 连接数而变化)。显示器的地址通常在 DISPLAY 环境变量中指示。

  • 它需要显示的密码。X 显示密码称为 magic cookies。Magic cookies 不直接指定:它们始终存储在 X 授权文件中,这些文件是“display :42 has cookie 123456”形式的记录集合。X 授权文件通常在 XAUTHORITY 环境变量中指示。如果 $XAUTHORITY未设置,程序将使用~/.Xauthority

幸运的是你可以通过设置一些 cookies 来解决这个问题:

要在登录桌面 X 会话时复制 cookie,请将以下几行添加到~/.xprofile~/.profile(或登录时读取的其他脚本):

case :$DISPLAY:$XAUTHORITY in
  :*:?*) XAUTHORITY=~/.Xauthority xauth merge "$XAUTHORITY";;
esac

这是答案的一个小总结。请访问上面的链接查看所有详细信息。

相关内容