经过多次反复尝试后,我在远程机器上安装了另一个图像查看器(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
这是答案的一个小总结。请访问上面的链接查看所有详细信息。