Как сделать снимок экрана 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"));
У меня нет решения, но я знаю, как это сделать
- Вам нужен chromebook в режиме разработчика, чтобы иметь доступ к реальной консоли Linux, а не к виртуальной машине linux, которую вы устанавливаете через приложение "настройки".
- Поскольку chromebook находится на Wayland, вам нужно использовать что-то вроде
grim
который работает на Wayland, а неscrot
который дляX Windows
- Вы можете использовать собственный chroot Linux с поддержкой Wayland, например https://github.com/nmilosev/crouton-fedora-wayland, чтобы установить grim и другие собственные инструменты Wayland.