Свой маленький сервис хранения скриншотов для linux

Разное > Тюнинг
Появилась у меня нужда периодически показывать только что сделанные скриншоты людям, чтобы они их посмотрели. Слышал, что есть для этого специально обученный clip2net, но там надо вроде бы регистрироваться, качать и устанавливать какую-то программу, да ещё и лимиты есть то ли по весу, то ли по количеству, хранятся они ограниченное время — короче у меня в голове возникла мысль: «А, может, проще сделать самому»?
Пользуюсь я Ubuntu 10.04, но, думаю, что все написанное будет справедливо для множества разных линуксов. Писать буду так, как это я делал на убунте. Консольные команды писал первый раз в жизни, а PHP-код — второй, так что, возможно, можно было бы и «красивее» сделать.

В первую очередь, нам понадобится нечто уже умеющее делать скриншоты и сохранять их в файл, дабы не изобретать велосипед. Я использовал import из imagemagick. Ещё я использовал xbindkeys для того, чтобы забиндить горячую клавишу. Само собой, нужен будет сервер, на который эти скриншоты можно складывать с настроенным веб-сервером и PHP — с этим проблем, думаю, быть не должно: хостинг-провайдеров сейчас масса, цены копеечные, да и поднять полноценный веб-сервер на той же убунте не составит никакого труда — этот процесс я опущу. Итак, приступим. Для начала установим нужное ПО, если его ещё нет:

sudo apt-get install imagemagick xbindkeys

Далее создадим скрипт, который будет делать скриншоты. Пусть он будет храниться в файле /home/username/makescreenshot. Вот его содержимое:

#!/bin/bash
import -monitor /tmp/screenshot.jpg
response=$(curl -F "file=@/tmp/screenshot.jpg;filename=input.jpg" -F "key=cq3b57q3ott57qo37q34o58" -A 'Mozilla/4.0' yourserverdomainname.ru/)
unlink /tmp/screenshot.jpg
zenity --info --text $response


Всего пять строк. Во второй строке мы, собственно, командуем import'y, чтобы он начал процесс захвата скриншота и как только всё закончится, то надо его сохранить в файл /tmp/screenshot.jpg. Далее, в третьей строке, мы при помощи curl отправляем файл к себе на сервер, который живёт по адресу yourserverdomainname.ru и готов к приёму файлов. Для того, чтобы никто больше ничего не заливал на сервер, я использовал «ключ», который проверяется в скрипте. В четвёртой строке удалим файл за ненадобностью. Ну и, наконец, в пятой строке мы выведем окошко, содержимое которого сообщил нам сервер — если всё хорошо, то он пришлёт нам адрес картинки.

Сам процесс захвата скриншота выглядит так: курсор из обчного становится крестообразным и можно либо выделить область на экране — тогда будет сделан снимок этой области — или просто «ткнуть» в какое-нибудь окно и тогда будет сделан снимок отдельно взятого окна.

Теперь «повесим» событие на горячую клавишу. Для этого создадим (если ещё не создан) файл в домашней папке .xbindkeysrc и заполним его следующим содержимым:

"/home/username/makescreenshot"
Alt + s


Для того, чтобы применить изменения, выполним в терминале xbindkeys.
То есть мы «повесили» на сочетание клавиш Alt+s запуск нашего скрипта. С клиентсткой частью на этом закончим.

Перейдём к части серверной. Создадим папку images, куда будем складывать полученные скриншоты и скрипт index.php, который будет их туда складывать. Вот его содержимое:

if (isset($_POST['key']) && $_POST['key']=='cq3b57q3ott57qo37q34o58' && !empty($_FILES['file']['tmp_name']))
{
 $a='qwertyuiopasdfghjklzxcvbnm1234567890';
 $filename='';
 for($k=0; $k $filename.=$a[rand(0,35)];
 copy($_FILES['file']['tmp_name'], $_SERVER['DOCUMENT_ROOT'].'/images/'.$filename.'.jpg');
 echo 'http://'.$_SERVER['SERVER_NAME'].'/images/'.$filename.'.jpg';
}
else
 echo 'ERROR';


Вот, собственно, и всё. Сервис лично мне пришёлся по нраву — возможно и вам пригодится.

Источник: http://habrahabr.ru/blogs/linux/129606/

Комментарии
]]> ipv6 ready Kiev LUGLinux4MeНостальгияЛичный сайт skeletora ]]>