Необходимое введение
Однажды в одном из ресторанов моего города сломался монитор готовности заказов - такой, знаете, телевизор, как модно сейчас в этих ваших фастфудах стало ставить. Только в нашем случае готовые заказы вбиваются с цифровой клавиатуры на барной стойке, и история нигде не хранится. В прошлом там стоял LED-монитор, к которому была подключена своя клавиатура. Как только это счастье перестало работать, руководство ресторана, не долго думая, распорядилось выбросить всю конструкцию на помойку, и только после этого связалось с нами (наша компания занимается аутсорс-поддержкой) и попросило в кратчайшие сроки разработать новое аналогичное решение. Необходимо уточнить, что то, что я опишу ниже, не претендует на лучшее решение задачи, это лишь описание решенной мной задачи, которое сработало, и работает уже полгода без каких-либо нареканий.
Собственно процесс создания
У нас в загашниках был найден маленький одноплатный компьютер Raspberry Pi. В нашем случае это был Model 3b, но для такой задачи сгодится любая из более ранних моделей, либо Orange Pi (более бюджетные китайские братья). На нем был уже ранее мной установлен Raspbian (дистрибутив Linux, основанный на Debian и специально адаптированный под Raspberry). Так же параллельно был заказан монитор от Acer с креплением VESA, само крепление и проводной цифровой блок (как Numpad на обычной клавиатуре).
Итак, что мы имеем:
- Никакой необходимости где-то фиксировать номера заказов нет
- Заказы точно так же забиваются с клавиатуры сотрудниками ресторана
- Решение нужно предоставить максимально быстро и просто
Решено было оставить систему какой есть, и запускать нашу «программу» в полноэкранном Chromium. Была на скорую руку написана простейшая web-страница, на чистом HTML и CSS, без JavaScript или PHP. Вся страница состоит из HTML-тега <textarea>, растянутого на весь экран.
Из интересных особенностей: для скрытия мигающего курсора ввода цвет шрифта совпадает с цветом фона, а для того, чтобы текст было видно, используется тень CSS: text-shadow: 0 0 0 *цвет*. Так же, необходимо было скрыть полосу прокрутки, чтобы она не мешала гостям. Учитывая, что мы пишем верстку для одного браузера - проще всего это сделать так: body::-webkit-scrollbar { display: none }; для тела страницы и textarea::-webkit-scrollbar { display: none }; для, соответственно, textarea.
Сайт готов, но есть несколько проблем:
- Экран должен быть расположен вертикально, а такой настройки в параметрах монитора у Raspbian нет.
- Chromium должен запускаться на старте, причем сразу в полноэкранном режиме. Настроек автозапуска программ с параметрами в нашей системе также нет.
- Необходимо скрывать курсор мыши, так как двигать его нечем (и незачем)
Решение проблем
Начнем с поворота экрана. В интернете можно найти несколько разных вариантов, но каждый включает в себя редактирование файла /boot/config.txt. Я использовал display_rotate=3. Иногда этого достаточно, но мне пришлось еще увеличить выделение оперативной памяти в пользу графики. В том же файле я прописал gpu_mem=128.
Теперь запуск браузера на загрузке компьютера. В том же интернете в большинстве своем пишут про редактирование файла rc.local, но мне этот способ кажется чересчур радикальным. Мне больше по душе использование файла ~/.config/lxsession/LXDE-pi/autostart, так как он будет изменять поведение только для одного пользователя. В этот файлик мы дописываем команду запуска: chromium-browser --app=*путь_до_файла* --start-fullscreen.
Осталось только скрытие курсора мыши. Для решение этой проблемы самый простой вариант - установить из репозитория программу Unclutter. В Raspbian есть свой графический менеджер пакетов, но мне проще было запустить sudo apt-get install unclutter. Способом, описанным выше для Chromium добавим программу в автозапуск.
Заключение
Вот и вся настройка. На все нам потребовалось около полутора часов, включая установку, поиск проблем и прочее. Снова повторюсь, что решение не претендует на единственно верное, и даже хорошее. Кстати, это моя первая статья в Яндекс Дзен, но я планирую писать больше об интересных задачах, выпадающих на плечи сотрудника техподдержки.