Как сделать снимок экрана Chromebook в командной строке Linux?

В Linux на моем Chromebook я пытаюсь сделать снимок экрана с помощью командной строки, но, похоже, ничего не работает. я пытался ImageMagick...

sudo apt-get install imagemagick

import -window root filename.png
# "unable to read X window image 'root'"

import filename.png
# "unable to grab mouse '': No such file or directory"

И я тоже пробовал scrot...

sudo apt-get install scrot

scrot -u filename.png
#"BadDrawable (invalid Pixmap or Window parameter)"

Я попробовал несколько методов Python, но единственный, который я смог успешно установить и запустить без ошибок, был pyscreeze (который использует scrot), и он не произвел ничего, кроме пустого черного изображения, которое для меня бесполезно.

Что касается других методов Python, я пробовал pyautoguiкоторый не удалось установить, сообщив мне "Не удалось построить колесо для подушки". Я старался pyscreenshot, который установил и запустил, но сказал мне: "Все серверные ВМ не работают". Я тоже пробовал ImageGrab, который сказал мне, что "ImageGrab - это только MacOS и Windows".

Кто-нибудь знает, как это сделать?

Заранее спасибо!

2 ответа

Javascript-решение

Вот способ сделать снимок экрана любой части экрана Chromebook, окна Chrome или вкладки Chrome.

Вставьте это в консоль браузера, чтобы сделать снимок экрана.

      async function takeScreenshot(format = "image/png") {
  const stream = await navigator.mediaDevices.getDisplayMedia({video:true});

  const video = document.createElement("video");
  video.srcObject = stream;
  video.muted = true;
  await video.play();

  const canvas = document.createElement("canvas");
  canvas.width = video.videoWidth;
  canvas.height = video.videoHeight;
  const context = canvas.getContext("2d");

  context.drawImage(video, 0, 0);

  const blob = await new Promise(resolve => canvas.toBlob(resolve, format));

  stream.getTracks().forEach(track => track.stop());

  return blob;
}

function download(blob, name = "Untitled") {
  const elt = document.createElement("a");
  elt.download = name;
  elt.href = URL.createObjectURL(blob);
  elt.click();
  URL.revokeObjectURL(elt.href);
}

takeScreenshot("image/png").then(blob => download(blob, "Screenshot.png"));

У меня нет решения, но я знаю, как это сделать

  1. Вам нужен chromebook в режиме разработчика, чтобы иметь доступ к реальной консоли Linux, а не к виртуальной машине linux, которую вы устанавливаете через приложение "настройки".
  2. Поскольку chromebook находится на Wayland, вам нужно использовать что-то вроде grim который работает на Wayland, а не scrot который для X Windows
  3. Вы можете использовать собственный chroot Linux с поддержкой Wayland, например https://github.com/nmilosev/crouton-fedora-wayland, чтобы установить grim и другие собственные инструменты Wayland.
Другие вопросы по тегам