web-dev-qa-db-ja.com

SSH経由でGnomeデスクトップからスクリーンショットを取得します

Fedora 30(まもなく32)をベースにした「デジタルサイネージクライアント」用に自動化されたキックスタートインストールをセットアップしました。現在画面に表示されているものを実際に視覚的にフィードバックする必要があります。コマンドラインからGnome-Remote-Desktopを有効にしようとしましたが( コマンドラインからGnome画面の共有を有効にしますか? を参照)、残念ながらできません。

したがって、新しいアプローチは、スクリーンショットを撮ることです(そしてそれをscp経由でコピーします)。 gnome-screenshotを使用してgnome-terminal経由でクライアント上で直接スクリーンショットを撮ることができますが、リモートからこれを行う方法がわかりません。 KDEスペクタクルやシャッターのような他のツールも試しましたが、運もありませんでした。

アイデアは、スクリーンショットを撮るようにcronjobを設定することでした:

$> crontab -e

1 * * * * gnome-screenshot

しかし、これは8で機能しません。 journalctl _COMM=cron-- No entries --と言います

誰かがGnome-Wayland-Fedoraデスクトップからスクリーンショットを撮る方法を知っていますか?これはcrontab経由で機能する必要がありますか?

5
n-tchen

ウェイランド

N-tchenからの情報に基づいて、 Flameshot (Fedoraリポジトリ内)はうまく機能します:

flameshot screen -p ~/

Ssh経由で接続している場合は、上記の行の先頭にWAYLAND_DISPLAY=wayland-0を追加します。

Flameshotの代わりにgnome-screenshotを使用することもできますが、sshには上記の追加が必要です。

追加情報( ソース ):

Waylandでスクリーンショットを取得するためのクロスプラットフォームの方法は、 xdg-desktop-portal です(これはFlatpakの外部でも機能します)。 を参照してくださいhttps://github.com/flatpak/xdg-desktop-portal/blob/master/data/org.freedesktop.portal.Screenshot.xml

最後に、PyscreenshotはWaylandをサポートしています。 GitHub README を参照してください

X11の場合

ImageMagickのimportコマンドは、スクリーンショットの優れた機能を果たします。

import -silent -window root /tmp/screenshot.jpg

Ssh経由で接続している場合は、上記の行の先頭にDISPLAY=:0.0を追加します。ローカルにログインしているのと同じユーザーとしてログインする必要があります。

これをcrontabで実行したい場合は、次のように設定します。これにより、スクリーンショットが6分ごとに取得され、日時エンコードされたファイル名とともに/root/monitor/に保存されます。 Ubuntu 16.04および18.04でテストされています。

echo -n "/bin/bash -c '"                                                                  >cronexec
echo -n   'export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin && ' >>cronexec
echo -n   'export HOME=/root && '                                                        >>cronexec
echo -n   'export D1=/tmp/gneemp && '                                                    >>cronexec
echo -n   'export F2=`date --utc +/root/monitor/%Y-%m-%dT%H:%M.jpg` && '                 >>cronexec
echo -n   'mkdir -p $D1 && '                                                             >>cronexec
echo -n   'chmod 643 $D1 && '                                                            >>cronexec
echo -n   'DISPLAY=:0.0 Sudo -u `who --users |head -1 |grep -o "^\S*"` import -quiet -silent -window root $D1/tmp.jpg && '  >>cronexec
echo -n   'mkdir -p /root/monitor && '                                                   >>cronexec
echo -n   'mv $D1/tmp.jpg $F2 && '                                                       >>cronexec
echo -n   'rmdir $D1 '                                                                   >>cronexec
echo    "'"                                                                              >>cronexec
Perl -p -i -e 's|\%|\\\%|g;' cronexec # from the manpage:  "Percent-signs (%) in the command, unless escaped with backslash (\) ..."
(Sudo crontab -l 2>/dev/null; echo -n "*/6 * * * * "; cat cronexec) |Sudo crontab - && rm cronexec
4
bitinerant