С рождением ребёнка существенно повышается внимание, уделяемое погоде на улице: если сам ты можешь выйти на улицу в чём придётся, и немножко помёрзнуть или промокнуть, не взяв зонтик, то родительский инстинкт просто не даст причинить неудобство твоему ребёнку. Спасибо современным технологиям - температуру на улице и прогноз погоды можно в любой момент посмотреть на специальных сайтах.
И всё было бы хорошо, но в один прекрасный день я пообещал своей супруге повесить за окно обычный термометр - ей было неудобно открывать ноутбук, заходить на сайт и смотреть погоду там.
Как говорится в известной пословице: мужик сказал, женщина напомнила, женщина напомнила, женщина напомнила, женщина задолбала, мужик сделал.
Вообще, идея повесить в коридоре монитор и выводить на него всякие непотребности посещала меня много раз за последние годы, однако впихнуть даже самый маленький, 14-дюймовый монитор было некуда, а маленькие текстовые или графические дисплеи, которые так любят всякие моддеры, ну совершенно неинформативны и нечитаемы издалека.
Однажды, делая заказ на сайте DX я наткнулся на достаточно маленький (7 дюймов) телевизор с VGA-входом и решил воплотить свою идею в жизнь.
Непосредственно над входной дверью у меня в квартире есть небольшой шкаф, в котором я держал роутер, старый ноутбук, используемый как сервер, NAS и прочую "живность". Купленный мною телевизор-монитор вписался в этот зоопарк идеально.
Дальнейшее описание достаточно тривиально - большую часть можно смело опустить.
Настройка сервера
Всё, что нам требуется от компьютера - показывать веб-страничку. Самый простой способ сделать это - поставить иксы, какой-нибудь лёгкий оконный менеджер, браузер и запускать всё это автоматически при запуске, открывая в браузере нашу страницу.
С иксами я не мучался и просто установил Ubuntu 12.04, благо она оказалась LTS, да и стоявшую у меня для всяких тестов и разработки версию 8.04 давно пора было обновить.
Страничку будем отдавать с помощью nginx:
1
|
sudo
apt
-
get
install
nginx
|
А гененировать по крону с помощью Mojolicious - замечательного фреймфорка:
1
|
curl
get
.mojolicio
.us
|
sudo
sh
|
Вообще, можно было бы и страничку отдавать с помощью Mojo, запустив скрипт (с малейшими переделками) через morbo, но вариант с nginx и генерацией статического файла тоже имеет право на существование - таким образом мы всегда отдаём браузеру сгенерированную страницу и у нас не будет задержек, да и кэширование, в случае с несколькими клиентами не помешает.
Создаём директорию, в которой будет лежать наша html-страничка:
1
2
|
sudo
mkdir
-
p
/
var
/
www
/
weather
/
sudo
chown
www
-
data
:
www
-
data
/
var
/
www
/
weather
|
Сохраняем наш перл-скрипт:
1
2
|
sudo
curl
https
:
/
/
raw
.github
.com
/
dreadatour
/
weather
/
master
/
weather
.pl
-
o
/
usr
/
bin
/
generate
-
weather
sudo
chmod
+
x
/
usr
/
bin
/
generate
-
weather
|
Добавляем в crontab строку для запуска скрипта. Для этого откроем файл /etc/crontab в любом текстовом редакторе:
1
|
sudo
nano
/
etc
/
crontab
|
И добавим в конец следующую строку:
1
|
*
*
*
*
*
www
-
data
/
usr
/
bin
/
generate
-
weather
&
gt
;
/
var
/
www
/
weather
/
index
.
html
|
Ждём, когда cron отработает и у нас появится файл с прогнозом погоды (файл будет обновляться раз в минуту):
1
|
ls
/
var
/
www
/
weather
/
index
.html
|
Правим конфиг nginx /etc/nginx/sites-available/default:
1
2
3
4
5
6
|
server
{
listen
80
;
server_name
localhost
;
root
/
var
/
www
/
weather
/
;
index
index
.
html
;
}
|
И рестартим его:
1
|
sudo
/
etc
/
init
.d
/
nginx
restart
|
Проверяем, что всё работает как надо:
1
|
curl
localhost
|
В результате мы должны получить нашу html-страницу.
Настройка системы
В качестве менеджера окон выбор пал на Openbox (более тяжёлые WM ставить не было никакого смысла). Ставим его:
1
|
sudo
apt
-
get
install
openbox
|
В качестве браузера поставим хром (а точнее его вариацию - chromium):
1
|
sudo
apt
-
get
install
chromium
-
browser
|
Ставим утилиту "unclutter" - с помощью неё скрываем курсор мыши:
1
|
sudo
apt
-
get
install
unclutter
|
В настройках убунты включаем автоматический вход в систему - как оказалось, довольно неудобно после каждой перезагрузки залезать в шкаф и логиниться там с помощью клавиатуры ноутбука, а выводить клавиатуру наружу излишне и глупо.
Далее, создаём файл /usr/share/xsessions/chrome-session.desktop:
1
2
3
4
|
[
Desktop
Entry
]
Name
=
chrome
-
session
Comment
=
Weather
Exec
=
/
usr
/
bin
/
chrome
-
session
|
И файл /usr/bin/chrome-session:
1
2
3
4
5
6
7
8
|
#!/bin/sh
openbox
-
session
&
amp
;
# запускаем openbox
xrandr
--
output
VGA1
--
mode
800x600
&
amp
;
# устанавливаем разрешение телевизора
xset
s
blank
&
amp
;
# выключаем screensaver
xset
s
0
0
&
amp
;
xset
-
dpms
&
amp
;
unclutter
-
idle
1
&
amp
;
# прячем мышку
chromium
-
browser
--
kiosk
"/localhost/"
# запускаем браузер и открываем страницу с прогнозом
|
Браузер запускается в режиме "киоск" - в полноэкранном режиме.
Разлогиниваемся, выбираем в списке сессий нашу "chrome-session", вводим пароль и попадаем на страничку с прогнозом погоды. На всякий случай для проверки перегружаем компьютер:
1
|
sudo
reboot
|
Всё должно работать.
Не останавливаемся
Вместе с телевизором я заказал тач-панель соответствующих размеров, но при установке её я благополучно всё испортил: благодаря кривизне моих рук при закручивании крепёжных винтов панель треснула и отказалась работать. Я уже заказал ещё одну панель и в следующий раз буду аккуратнее.
В дальнейших планах - выводить на монитор пробки (удобно посмотреть их перед выходом, просто ткнув в экран), а так же другие плюшки, вроде изображения с дверного глазка, различных напоминаний и уведомлений.
Исходный код скрипта и конфигурационных файлов системы выложены тут: github.com.