Vytvoření vlastního screenshot serveru pro Linux
9.10.2019
Ukážeme si jak vytvořit vlastní jednoduchý server pro opis obrazovky pro Linux v C++ (s použitím GTK) a PHP.
Aplikace v C++ a její sestavení
Nejprve si v C++ vytvoříme aplikaci které s využitím objektů GdkWindow a GdkPixbuf při spuštění uloží aktuální snímek celé obrazovky do souboru screenshot.jpeg.
Následující kód samozřejmě implementuje pouze základní funkčnost, tj. např. bez volby jména souboru a kvality komprese (zde je nastavena na 95) a také nevypisuje ani neloguje případné běhové chyby.
#include <stdlib.h> #include <gtk/gtk.h> int main(int argc, char** argv) { gtk_init(&argc, &argv); GdkPixbuf* pixbuf; GdkWindow* root_window; GError* err = NULL; gint x, y, width, height; root_window = gdk_get_default_root_window(); if (!root_window) return EXIT_FAILURE; gdk_window_get_geometry(root_window, &x, &y, &width, &height); pixbuf = gdk_pixbuf_get_from_window(root_window, x, y, width, height); if (NULL == pixbuf) return EXIT_FAILURE; if (FALSE == gdk_pixbuf_save(pixbuf, "screenshot.jpeg", "jpeg", &err, "quality", "95", NULL)) { g_object_unref(pixbuf); return EXIT_FAILURE; } g_object_unref(pixbuf); return EXIT_SUCCESS; }
Pro překlad a sestavení potřebujeme mít nainstalovaný překladač jazyka C++, tj. v Debianu (a na něm založených distribucích) balíček g++. Dále potřebujeme vývojářský balíček knihovny GTK, tj. v Debianu balíček libgtk-3-dev. Uvedený kód lze sestavit následujícím příkazem:
g++ -O2 -Wall rc-screenshot.cpp `pkg-config --cflags --libs gtk+-3.0` -orc-screenshot
PHP skript a jeho spuštění jako server
První část máme hotovou a nyní zbývá napsat PHP skript, který při svém spuštění (na serveru) nejprve zavolá náš program a následně načte právě uložený opis obrazovky a odešle jej klientovi. Celý skript v souboru index.php (opět zjednodušený bez ošetření a reakce na případné chyby) může vypadat takto:
<?php exec("./rc-screenshot"); $cesta = 'screenshot.jpeg'; $data = file_get_contents($cesta); header('Content-type: image/jpeg'); echo($data);
Pro spuštění serveru je potřeba samozřejmě mít nainstalovaný balík php. Server pak můžeme spustit jako tzv. "vestavěný server" (build-in server) tak že ve složce kde máme vlastní aplikaci rc-screenshot a PHP skript index.php zavoláme:
php -S xxx.xxx.xxx.xxx:8000
kde xxx.xxx.xxx.xxx je konkrétní IP adresa počítače na kterém je server.
Projekt najdete také na github, kde si jej můžete prohlédnout, stáhnout a libovolně upravit podle svých potřeb.
Nové články
Souborové operace na Linuxu v jazyce C
Využívejte Midnight Commander naplno
Procesor a jádra, běh na určeném jádru v C.
picom - kompozitor pro odlehčená Linuxová prostředí
Kontakt
739 219 991
live:radekchalupa_1