Простой переключатель компьютерных консолей на транзисторе и реле (KVM Switch). Полный контроль - переключатели KVM over IP Выходим в прямой эфир

Nokia 31.07.2021
Nokia

И так приступим, для прошивки потребуется утилита от производителя под названием Flip . Качаем, устанавливаем, запускаем и вот перед нами окно программы:

Сначала кнопки(галки) не активны, это нормально, подключаем ардуину к компьютеру и замыкаем – размыкаем два крайних контакта со стороны USB порта, RESET и GND.

В системе должно появиться новое устройство под названием, как ни странно, ATmega16u2 устанавливаем драйвер(в папке с программой), выбираем в программе flip вкладку «Settings» > «Communication» > «USB» > «open», кнопки должны стать активны. На всякий случай можно сделать бэкап прошивки, чтоб можно было все вернуть на место. В меню «File» нажимаем «Load HEX File», программа требовательна к путям, лучше всего положить файл прошивки в корень диска C:, выбираем нужный hex файл с прошивкой, проверяем стоят ли галки «Erase», «Program», «Verify» и нажимаем «Run». Отключаем - подключаем arduino и вуаля… Теперь мы больше не сможем загружать прошивки в ардуино через встроенный USB, зато получили отличную клавиатуру без кнопок.

Не переживайте по поводу прошивки arduino, прошивку можно будет загрузить из Arduino IDE через отдельный USB To TTL адаптер, хотя надо сказать, теперь это будет менее удобно.

Подключаем USB To TTL адаптер, например такой:

Нам понадобятся Белый, зеленый и черный контакты это RX, TX и GND соответственно, подключаем их к пинам с такими же обозначениями на ардуине, только наоборот RX к TX, а TX к RX. Красный контакт использовать не следует!

Подключаем USB To TTL к компьютеру, устанавливаем драйвера, в диспетчере устройств должен появиться новый COM Port. Открываем arduino IDE и выставляем: Плата - Arduino/Genuino Uno, Порт – наш новоиспеченный последовательный порт.

Приступаем к прошивке arduino

Добавим необходимую библиотеку в arduino IDE: Переходим по ссылке github.com/SFE-Chris/UNO-HIDKeyboard-Library нажимаем «Clone or download» > «Download ZIP». далее в arduino IDE выбираем вкладку «Скетч» > «Подключить библиотеку» > «Добавить.ZIP библиотеку» и выбираем только что скачанный zip архив.

Подготовка закончена, переходим непосредственно к прошивке. Копируем мою писанину:

Arduino - Sketch

#include HIDKeyboard keyboard; int sbor; void setup() { keyboard.begin(); } void loop() { while (Serial.available()) {//запуск цикла при появлении данных sbor += Serial.read();//считывание данных, сложение в десятичном виде if (sbor == 27){//появление символа управляющей последовательности for (int i=0; i<=4; i++){//сложение последовательности if (sbor == 165) {//для определения F1-F12 на разных терминалах могут быть разные значения sbor += sbor; } sbor += Serial.read(); delay(1); } } } if (sbor > 0) { //переход по десятичной сумме последовательности switch (sbor){ case 505: keyboard.pressSpecialKey(F1); break; case 506: keyboard.pressSpecialKey(F2); break; case 507: keyboard.pressSpecialKey(F3); break; case 508: keyboard.pressSpecialKey(F4); break; case 509: keyboard.pressSpecialKey(F5); break; case 511: keyboard.pressSpecialKey(F6); break; case 512: keyboard.pressSpecialKey(F7); break; case 513: keyboard.pressSpecialKey(F8); break; case 340: keyboard.pressSpecialKey(F9); break; case 341: keyboard.pressSpecialKey(F10); break; case 343: keyboard.pressSpecialKey(F11); break; case 344: keyboard.pressSpecialKey(F12); break; case 13: keyboard.pressSpecialKey(ENTER); break; case 22: keyboard.pressSpecialKey(ESCAPE); break; case 127: keyboard.pressSpecialKey(BACKSPACE); break; case 9: keyboard.pressSpecialKey(TAB); break; case 32: keyboard.pressSpecialKey(SPACEBAR); break; case 26: keyboard.pressSpecialKey(PAUSE); break; case 292: keyboard.pressSpecialKey(INSERT); break; case 456: keyboard.pressSpecialKey(HOME); break; case 295: keyboard.pressSpecialKey(PAGEUP); break; case 294: keyboard.pressSpecialKey(END); break; case 296: keyboard.pressSpecialKey(PAGEDOWN); break; case 182: keyboard.pressSpecialKey(RIGHTARROW); break; case 183: keyboard.pressSpecialKey(LEFTARROW); break; case 181: keyboard.pressSpecialKey(DOWNARROW); break; case 180: keyboard.pressSpecialKey(UPARROW); break; case 293: keyboard.pressSpecialKey(DELETE); break; case 320: keyboard.pressSpecialKey((CTRL | ALT), DELETE); break; //для вызова ctl+alt+del нажать alt + del case 346: keyboard.pressSpecialKey(ALT, F4); break; //для вызова alt+f4 нажать shift + F4 default: keyboard.pressKey(sbor); break; } //Serial.println(sbor);//только для отладки без подключения к usb keyboard.releaseKey(); sbor = NULL; } }


вставляем в arduino IDE и нажимаем кнопку проверки. Вот сейчас начнется самый ответственный этап, тут самое главное поймать момент, мало у кого получается с первого раза. Нажимаем кнопку загрузки в arduino IDE, сначала побегут белые строчки с логом компиляции, за ними последуют оранжевые, это уже установка соединения с последовательным портом, вот этот самый момент надо поймать и успеть нажать на плате ардуины кнопку RESET. Должна произойти загрузка прошивки, если все удачно вы увидите надпись вроде этой

Avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.34s avrdude: verifying ... avrdude: 2934 bytes of flash verified avrdude done. Thank you.
Если после нескольких попыток загрузка прошивки так и не произошла, попробуйте поменять местами контакты RX и TX, а также проверьте надежно ли подключен контакт GND.

Финишная прямая

Открываем консоль на распберри и пишем:

Sudo raspi-config
Откроется меню настройки распберри, выбираем «Advanced Options» > «Serial» и выбираем «No».

Возможно эти манипуляции и не понадобятся, так, перестраховка. Этот параметр определяет, будет ли ОС на малине взаимодействовать с serial портом, это взаимодействие нужно в основном для отладки, так что смело отключаем, нам оно будет только мешать, т.к. с ардуиной мы будем общаться именно через этот порт, а система будет засорять эфир.

Устанавливаем программу minicom.

Minicom - простенькая программа для работы с serial портом.

Sudo apt-get install minicom -y
Задаем права на доступ к устройству, /dev/ttyAMA0 - это тот самый сериал порт.

Sudo chown pi /dev/ttyAMA0 sudo chmod 744 /dev/ttyAMA0
Запускаем minicom:

Sudo minicom -s
Откроется меню программы, выбираем пункт «Serial port setup», откроется еще одно меню, выбираем «Serial Device» нажатием на клавишу A, прописываем /dev/ttyAMA0, нажимаем Enter, далее выбираем пункт Bps/Par/Bits под буквой E, появляется очередное меню нажимаем C и Q строчка Current: должна выглядеть вот так «9600 8N1» нажимаем Enter. Убедимся что в строчках F - Hardware Flow Control: и G - Software Flow Control: стоит No, в общем все должно быть как на скриншоте ниже, нажимаем Enter.

Сохраним эти настройки как настройки по умолчанию «Save setup as dfl» и закрываем «Exit from Minicom».

Подключение

Едем дальше, теперь у нас практически все готово, осталось только подключить ардуину к serial порту малины, вот как-то так:

Здесь есть один момент, у ардуино и распберри разные уровни напряжения и по идее их нужно согласовать, советую ознакомиться со статьей .

Хотя у меня все заработало напрямую без согласования, не следует подражать плохому примеру и приобрести преобразователь логических уровней, самый простой выглядит так:

Или хотя бы собрать делитель напряжения на резисторах.

Запуск

Все готово, можно начинать.

Проверяем все соединения, вкючаем raspberry pi, переходим в консоль малины, запускаем minicom. Сразу оговорюсь я подключался к малине через ssh, в качестве клиента использовал KiTTY(модифицированную версию PuTTY), это важно т.к. с другими терминалами значения передаваемых клавиш могут быть иными и соответственно нужно будет сделать поправку на ветер - поменять номер перехода switch case.

В общем передаю вам в руки как говорится «as is». Что ж на этом пожалуй закончу, самодельный IP KVM готов.

P. S.

На последок опишу что получилось в сухом остатке.

Плюсы:

- Цена
- Устройство получилось относительно недорогим
- Raspberry Pi: примерно 2700руб.
- Arduino UNO: примерно 400руб.
- VGA to AV конвертер: примерно 700руб.
- Плата видеозахвата: 500руб.
- Итого: 4300руб.

- Тонкая настройка
Можно перехватывать практически любые комбинации и назначать на них практически любые клавиши вплоть до KEYBOARDPOWER и VOLUMEUP, кстати возможные значения можно посмотреть в заголовочном файле HIDKeyboard.h, а можно и добавить свои.

Минусы:

- Торможение как видео, так и передачи нажатий
- Второй и самый большой это качество изображения , здесь просто необходим грустный смайлик, оно ужасно, даже если убавить разрешение на целевом компьютере до минимума, максимум что можно будет сделать, это настроить БИОС и выбрать пункт в загрузчике. Но разве собственно не для этого нужен KVM?.. А для всего остального существует радмин и ему подобные.

Если вы уже, длительное время пользуетесь персональным компьютером, то вам приходится периодически обновлять не только программное обеспечение, но и "железо", тоесть, сам компьютер. А что делать со старым? Особенно, если от него остается только системный блок (монитор "перебрался" к новому). Приобретенный десять лет назад "486DX33", который был тогда последним достижением техники, сейчас уже продать невозможно.

Да и жалко, - ведь он за свою долгую (по компьютерным меркам) жизнь успел обрости программаторами микроконтроллеров и ППЗУ, на нем стоят (и хорошо работают) различные радиолюбительские и радиотехнические программы. Вот только, для работы в интернете он не пригоден (потому и был приобретен новый).

Устанавливать всю эту "архитектуру" на новый проблематично, - не хватает портов СОМ и LPT (в старом было три СОМ и два LPT), а с портами USB нового ничего из старой периферии работать не может. Вот и было решено сохранить два системных блока и две "мышки".

И переключать между ними монитор и клавиатуру. Тем более, для этих целей в продаже бывают (отвратительные, как выяснилось) переключатели рабочих мест.

Приобретенный механический переключатель рабочих мест "Мaxtro" проработал не более месяца. Потом начались "выкрутасы" - то клавиатура неправильно работает, то на мониторе не все цвета. Приходится все-время его рукоятку как-то пододвигать, подталкивать, чтобы поймать момент, когда все будет работать нормально.

После продолжительных мучений с ним было решено сделать самодельный переключатель рабочих мест, но не на тайванском "галетнике”, контакты которого просто облезли, а на советстких реле РЭС-22, управляемый двумя кнопками.

На удивление, "Мaxtro" переключал все контакты разъемов клавиатуры и монитора, потому и в нем было так много контактных. На самом деле, для таких переключений достаточно семи контактных групп, потому что все "GND" можно соединить вместе, а питание клавиатуры коммутировать двумя диодами. Каждое РЭС-22 имеет по четыре контактные группы, поэтому, даже остается одна из них, которую можно использовать для управления самими реле (триггерный эффект реле).

Принципиальная схема

Схема сделана так, что она опознает включенный компьютер 2 по поступлению от него напряжения питания +5 V на клавиатуру. Если включить компьютер 2, то напряжение +5V поступит через конденсатор С2 на базу транзистора VT1, который откроется и включит реле.

Оно самоблокируется свободной контактной группой К1.4 и после окончания зарядки С2 останется включенным. В таком состоянии клавиатура и монитор переключатся на компьютер 2. В обесточенном состоянии клавиатура и монитор переключены на старый компьютер 1.

Рис. 1. Принципиальная схема коммутатора консолей.

Все детали собраны в железном корпусе от переключателя "Maxtro". "Мышки" используются отдельные для каждого из компьютеров. Питается переключатель от сетевого адаптера от неисправного принтера.

Проблема переключения принтера между двумя компьютерами решена иначе. Принтер (Samsung 1210) имеет два порта - LPT и USB. Порт LPT подключен к старому системному блоку, a USB - к новому.

С приходом в офисы широкополосного интернета стало возможно полноценное удаленное администрирование. Благодаря этой технологии обслуживающие организации смогли существенно уменьшить время реагирования на заявку клиента, а системные администраторы получили возможность оказывать поддержку даже находясь за пределами офиса. Но инструменты удаленного администрирования работают только после того, как загрузится ОС, если это по каким либо причинам невозможно потребуется физическое присутствие специалиста. Решить эту проблему способны переключатели KVM over IP.

Что такое KVM переключатели знают наверное все администраторы, это устройство позволяющее использовать одну консоль (монитор, клавиатура и мышь) для управления несколькими ПК. KVM переключатели могут быть как простыми, рассчитанными на персональное использование:

Так и для монтажа в стойку, поддерживающими каскадирование и позволяющие управлять сразу большим числом серверов (до нескольких сотен) из одного места:

Особняком в этой компании стоят переключатели KVM over IP, позволяющие получать доступ к консоли ПК из любого места посредством протокола TCP/IP. Долгое время данные устройства считались "предметами роскоши", однако в последнее время на рынке появились предложения по вполне гуманной цене, делающее их вполне доступными и для небольших организаций.

Рассмотрим возможности KVM over IP переключателя на примере ATEN ALTUSEN KH1508i стоимостью 727 USD. Кроме привлекательной цены данное устройство позволяет управлять до 256 ПК (при каскадировании переключателей), поддерживает платформы PC, Mac, Sun, подключения к ПК через PS/2 и USB.

Переключатель выполнен в формате 1U и может быть смонтирован в стойку. На передней панели находятся кнопки переключения выходов, индикатор активного порта, разъем для обновления прошивки, индикатор питания и кнопка Reset.

Еще одной особенностью переключателя является использование для подключения управляемых ПК витой пары UTP 5e, что позволяет размещать их на расстоянии до 40 м. Теперь не возникает проблемы с подключением серверов, находящихся в соседней стойке (или этажом ниже) и не нужно ломать голову над приобретением и прокладкой дорогостоящих специализированных кабелей. Разъемы для подключения управляемых ПК, сети, подчиненных переключателей и консоли находятся с тыльной стороны переключателя:

Для подключения управляемых ПК используются клиентские модули эмулирующие необходимую периферию. Эмуляция производится непосредственно модулем, независимо от наличия управляющего устройства. Это значит, что если вы забыли включить переключатель, управляемые ПК при загрузке все равно обнаружат клавиатуру, мышь и монитор и вам не придется их перезагружать, дабы получить доступ.

Производитель предлагает широкий выбор клиентских модулей управления компьютерами разных платформ, для ПК доступны два типа клиентских модулей: KA9520 (PS/2) и KA9570 (USB) стоимостью в 71 USD. Каждый модуль представляет собой контроллер с интерфейсом RJ-45 и полуметровый кабель с разъемами VGA и PS/2 (USB), имеет собственную прошивку, регулярно обновляемую производителем, на корпусе модуля имеется переключатель, переводящий его в режим обновления прошивки. Ниже показан модуль KA9520:

Для крепления на вертикальную поверхность в комплекте с модулем поставляется специальная корзина.

Настройки переключателя производятся через экранное меню или веб-интерфейс (в несколько ограниченном объеме). Если у вас в хозяйстве нет компьютеров Mac или Sun, то все настройки будут доступны через веб (по умолчанию все порты переключателя настроены на платформу PC).

Соединение с устройством производится по защищённому протоколу HTTPS, несмотря на то, что переключатель принимает соединения по порту 80, все равно происходит редирект на защищенное соединение (443 порт). Для передачи данных между переключателем и программой-клиентом используется порт 9000, это стоит учитывать при форвардинге портов (т.е. кроме 80 и/или 443 нужно пробросить также 9000).

Перейдем к сетевым функциям переключателя, по умолчанию он настроен на получение настроек по DHCP, что, на наш взгляд, гораздо лучше чем заранее установленный IP, достаточно посмотреть какой адрес присвоен устройству в настройках DHCP сервера и зарезервировать его за соответствующим MAC адресом (указан на корпусе устройства).

Для доступа можно использовать любой браузер (оптимально IE), веб интерфейс не богат на настройки, вы можете запустить Windows (только через IE) или Java клиент, либо загрузить их, если запустить через браузер их каким либо образом не получается.

Отдельного внимания заслуживает параметр Network Transfer Rate , для комфортной работы с устройством там следует указать минимальную гарантированную скорость канала по которому осуществляется доступ к переключателю.

Для доступа к управляемым ПК необходимо запустить клиент. Нам не удалось запустить Windows Client на Windows 7 64-bit, в данном случае выручает Java клиент, работающий на любой платформе с поддержкой Java. Уже в клиенте мы можем произвести более тонкую настройку устройства:

Для перехода к управляемым устройствам используется закладка Main , на которой отображаются все подключенные к переключателю (или цепочке переключателей) клиентские модули:

При правильной настройке скорости передачи данных работа через удаленного клиента довольно комфортна, единственным недостатком можно назвать некоторое (иногда значительное) отставание курсора мыши на удаленной системе от курсора на управляющем ПК.

Однако следует помнить, что работа через KVM Over IP требуется по большей части при нештатных ситуациях, когда требуется контроль на уровне загрузки ПК, в остальных случаях будет гораздо комфортней работать через RDP. Если вы используете USB-модуль (KA9570) убедитесь, что в BIOS включена поддержка USB клавиатуры и мыши, во избежание неприятных сюрпризов.

Также советуем настроить в BIOS сервера включение по сигналу с клавиатуры или по сети. Это позволит удаленно включить сервер, если вы вдруг его по ошибке выключите или выключит кто-то из излишне усердных сотрудников.

Переключатели KVM over IP позволяют администратору получить практически полный контроль над управляемым ПК из любой точки мира, был бы доступ в интернет. А кажущаяся на первый взгляд относительно высокая цена устройства с лихвой компенсируется предоставляемыми возможностями. В любом случае стоит прикинуть, что обойдется дешевле, KVM IP переключатель или время простоя предприятия, необходимое для приезда технического специалиста.

  • Теги:

Please enable JavaScript to view the

Эта статья написана под впечатлением от другой - большое спасибо автору! В этой статье почти удалось сделать собственный IP KVM Switch, и это круто! Но объясню, почему почти. Да, там все работает как и написал автор… До момента перезагрузки в биос - там вся магия рассеивается и сколько не старайся, ничего не происходит.

Решено было исправить это досадное недоразумение и как можно дешевле и компактней. Начнем со стереотипов Raspberry Pi и Arduino, а в следующей статье будет продолжение уже на другом железе.

Итак, что нам понадобится:

1. Плата видеозахвата обязательно с поддержкой UVC драйвера, вроде этой.Вариантов
полно на алиекспрессе и других китайских магазинах.

UVC это стандартизированный открытый драйвер который по умолчанию входит в большинство линукс дистрибутивов, с другими драйверами могут быть проблемы.

2. VGA to AV Конвертер:



Обратите внимание! Нужен именно VGA to AV, а не наоборот.

3. Arduino UNO, именно UNO, так как на ней есть чип Atmega16u2, он нас интересует в первую очередь. Вот он рядом с USB портом, так же бывают ардуины с чипом Atmega8u2 подойдут и с тем и с тем.

4. Ну и конечно Raspberry Pi, у меня был версии 2 b поэтому все написанное в этой статье актуально именно для него, но в целом думаю не должно возникнуть особых сложностей и с другими моделями малины.

Заливаем дистрибутив

Что ж вводные данные даны, пожалуй приступим.Я использовал дистрибутив 2015-05-05-raspbian-wheezy, вероятно это не принципиально, дальнейшие манипуляции должны подойти для любого дистрибутива основанного на Debian.

Подключаем плату видеозахвата к распберри, подключать лучше напрямую к USB не используя USB удлинителей особенно того что идет в комплекте с платой, иначе может возникнуть торможение видео, подвисания распберри и т.д.

Переходим в консоль, обновляем пакеты:

Sudo apt-get update && sudo apt-get upgrade –y

Передача видео

Проверяем определилась ли плата:

Ls /dev/video*
Должно выдать что-то вроде: /dev/video0.

Устанавливаем Motion, трансляцию захваченного изображения будем вести именно через него:

Sudo apt-get install motion -y
Редактируем конфиг автозапуска:

Sudo nano /etc/default/motion
В строке start_motion_daemon ставим ‘yes’. Сохраняем изменения Ctrl + x, y, Enter.

Редактируем конфиг самого motion(а):

Sudo nano /etc/motion/motion.conf
Меняем значения параметров как указано далее:

Параметр определяет запуск приложения в качестве службы:

Daemon on
Эти параметры определяют разрешение передаваемого изображения, смысла ставить большее разрешение нет, т.к. захват видео ограничен стандартами PAL или SECAM, разрешение коих 720х576. Это кстати досадный недостаток, но об этом позднее.

Width 800 height 600
Частота захвата кадров:

Framerate 25
Отключаем сохранение скриншотов:

Output_normal off
Качество передачи изображения:

Webcam_quality 100
Частота передачи кадров:

Webcam_maxrate 25
Отмена ограничения на подключение с других ip

Webcam_localhost off
Сохраняем изменения Ctrl + x, y, Enter.

Перезагружаем распберри:

Sudo reboot
Ждем пару минут если все сделали правильно должен загореться светодиод на плате видео захвата.

Подключаемся браузером к порту 8081 распберри и видим серый или синий прямоугольник с бегущим снизу временем.

Процесс пошел, ищем жертву для захвата сигнала с VGA порта, подключаем к порту “VGA IN” конвертера, а плату видеозахвата к “VIDEO OUT”. Должна получиться примерно такая картинка, не пугайтесь у меня плохой кабель поэтому изображение «двоит», пробовал с другим изображение было лучше, но разрешение не изменить. 720х576 это ограничение конвертера и платы видео захвата, которое при всем желании не преодолеть.

Что ж передавать изображение научились, осталось дело за малым - передать управление.

Передача управления

Для этого, как вы уже догадались, будем использовать ардуину. Выбор пал на Arduino UNO неспроста, там есть очень нужная для наших целей микросхема с названием Atmega16u2, только благодаря ей мне удалось заставить БИОС компьютера определить arduino как USB клавиатуру. По умолчанию в составе платы ардуино эта микросхема выполняет роль USB to Serial конвертера для заливки прошивки в микроконтроллер Atmega328p, большая прямоугольная микросхема на плате ардуино. По сути же Atmega16u2 является то же микроконтроллером, но с важным отличием, она способна напрямую работать с шиной USB. Atmega16u2, при наличии нужной прошивки, может эмулировать практически любое USB устройство. Понимаете к чему я веду? Мы прошьем это чудо инженерной мысли и заставим трудиться на благо общества.

Прошивка Atmega16u2

На просторах интернета была найдена прошивка , которая превращает Atmega16u2 в USB клавиатуру принимающую команды, определенного вида, через Serial Port.

Инструкция в данной статье написана для windows, линуксоиды же могут воспользоваться этой .

И так приступим, для прошивки потребуется утилита от производителя под названием Flip . Качаем, устанавливаем, запускаем и вот перед нами окно программы:

Сначала кнопки(галки) не активны, это нормально, подключаем ардуину к компьютеру и замыкаем – размыкаем два крайних контакта со стороны USB порта, RESET и GND.

В системе должно появиться новое устройство под названием, как ни странно, ATmega16u2 устанавливаем драйвер(в папке с программой), выбираем в программе flip вкладку «Settings» → «Communication» → «USB» → «open», кнопки должны стать активны. На всякий случай можно сделать бэкап прошивки, чтоб можно было все вернуть на место. В меню «File» нажимаем «Load HEX File», программа требовательна к путям, лучше всего положить файл прошивки в корень диска C:, выбираем нужный hex файл с прошивкой, проверяем стоят ли галки «Erase», «Program», «Verify» и нажимаем «Run». Отключаем - подключаем arduino и вуаля… Теперь мы больше не сможем загружать прошивки в ардуино через встроенный USB, зато получили отличную клавиатуру без кнопок.

Не переживайте по поводу прошивки arduino, прошивку можно будет загрузить из Arduino IDE через отдельный USB To TTL адаптер, хотя надо сказать, теперь это будет менее удобно.

Подключаем USB To TTL адаптер, например такой:

Нам понадобятся Белый, зеленый и черный контакты это RX, TX и GND соответственно, подключаем их к пинам с такими же обозначениями на ардуине, только наоборот RX к TX, а TX к RX. Красный контакт использовать не следует!

Подключаем USB To TTL к компьютеру, устанавливаем драйвера, в диспетчере устройств должен появиться новый COM Port. Открываем arduino IDE и выставляем: Плата - Arduino/Genuino Uno, Порт – наш новоиспеченный последовательный порт.

Приступаем к прошивке arduino

Добавим необходимую библиотеку в arduino IDE: Переходим по ссылке github.com/SFE-Chris/UNO-HIDKeyboard-Library нажимаем «Clone or download» → «Download ZIP». далее в arduino IDE выбираем вкладку «Скетч» → «Подключить библиотеку» → «Добавить.ZIP библиотеку» и выбираем только что скачанный zip архив.

Подготовка закончена, переходим непосредственно к прошивке. Копируем мою писанину:

Arduino - Sketch

#include HIDKeyboard keyboard; int sbor; void setup() { keyboard.begin(); } void loop() { while (Serial.available()) {//запуск цикла при появлении данных sbor += Serial.read();//считывание данных, сложение в десятичном виде if (sbor == 27){//появление символа управляющей последовательности for (int i=0; i<=4; i++){//сложение последовательности if (sbor == 165) {//для определения F1-F12 на разных терминалах могут быть разные значения sbor += sbor; } sbor += Serial.read(); delay(1); } } } if (sbor > 0) { //переход по десятичной сумме последовательности switch (sbor){ case 505: keyboard.pressSpecialKey(F1); break; case 506: keyboard.pressSpecialKey(F2); break; case 507: keyboard.pressSpecialKey(F3); break; case 508: keyboard.pressSpecialKey(F4); break; case 509: keyboard.pressSpecialKey(F5); break; case 511: keyboard.pressSpecialKey(F6); break; case 512: keyboard.pressSpecialKey(F7); break; case 513: keyboard.pressSpecialKey(F8); break; case 340: keyboard.pressSpecialKey(F9); break; case 341: keyboard.pressSpecialKey(F10); break; case 343: keyboard.pressSpecialKey(F11); break; case 344: keyboard.pressSpecialKey(F12); break; case 13: keyboard.pressSpecialKey(ENTER); break; case 22: keyboard.pressSpecialKey(ESCAPE); break; case 127: keyboard.pressSpecialKey(BACKSPACE); break; case 9: keyboard.pressSpecialKey(TAB); break; case 32: keyboard.pressSpecialKey(SPACEBAR); break; case 26: keyboard.pressSpecialKey(PAUSE); break; case 292: keyboard.pressSpecialKey(INSERT); break; case 456: keyboard.pressSpecialKey(HOME); break; case 295: keyboard.pressSpecialKey(PAGEUP); break; case 294: keyboard.pressSpecialKey(END); break; case 296: keyboard.pressSpecialKey(PAGEDOWN); break; case 182: keyboard.pressSpecialKey(RIGHTARROW); break; case 183: keyboard.pressSpecialKey(LEFTARROW); break; case 181: keyboard.pressSpecialKey(DOWNARROW); break; case 180: keyboard.pressSpecialKey(UPARROW); break; case 293: keyboard.pressSpecialKey(DELETE); break; case 320: keyboard.pressSpecialKey((CTRL | ALT), DELETE); break; //для вызова ctl+alt+del нажать alt + del case 346: keyboard.pressSpecialKey(ALT, F4); break; //для вызова alt+f4 нажать shift + F4 default: keyboard.pressKey(sbor); break; } //Serial.println(sbor);//только для отладки без подключения к usb keyboard.releaseKey(); sbor = NULL; } }


вставляем в arduino IDE и нажимаем кнопку проверки. Вот сейчас начнется самый ответственный этап, тут самое главное поймать момент, мало у кого получается с первого раза. Нажимаем кнопку загрузки в arduino IDE, сначала побегут белые строчки с логом компиляции, за ними последуют оранжевые, это уже установка соединения с последовательным портом, вот этот самый момент надо поймать и успеть нажать на плате ардуины кнопку RESET. Должна произойти загрузка прошивки, если все удачно вы увидите надпись вроде этой

Avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.34s avrdude: verifying ... avrdude: 2934 bytes of flash verified avrdude done. Thank you.
Если после нескольких попыток загрузка прошивки так и не произошла, попробуйте поменять местами контакты RX и TX, а также проверьте надежно ли подключен контакт GND.

Финишная прямая

Открываем консоль на распберри и пишем:

Sudo raspi-config
Откроется меню настройки распберри, выбираем «Advanced Options» → «Serial» и выбираем «No».

Возможно эти манипуляции и не понадобятся, так, перестраховка. Этот параметр определяет, будет ли ОС на малине взаимодействовать с serial портом, это взаимодействие нужно в основном для отладки, так что смело отключаем, нам оно будет только мешать, т.к. с ардуиной мы будем общаться именно через этот порт, а система будет засорять эфир.

Устанавливаем программу minicom.

Minicom - простенькая программа для работы с serial портом.

Sudo apt-get install minicom -y
Задаем права на доступ к устройству, /dev/ttyAMA0 - это тот самый сериал порт.

Sudo chown pi /dev/ttyAMA0 sudo chmod 744 /dev/ttyAMA0
Запускаем minicom:

Sudo minicom -s
Откроется меню программы, выбираем пункт «Serial port setup», откроется еще одно меню, выбираем «Serial Device» нажатием на клавишу A, прописываем /dev/ttyAMA0, нажимаем Enter, далее выбираем пункт Bps/Par/Bits под буквой E, появляется очередное меню нажимаем C и Q строчка Current: должна выглядеть вот так «9600 8N1» нажимаем Enter. Убедимся что в строчках F - Hardware Flow Control: и G - Software Flow Control: стоит No, в общем все должно быть как на скриншоте ниже, нажимаем Enter.

Сохраним эти настройки как настройки по умолчанию «Save setup as dfl» и закрываем «Exit from Minicom».

Подключение

Едем дальше, теперь у нас практически все готово, осталось только подключить ардуину к serial порту малины, вот как-то так:

Здесь есть один момент, у ардуино и распберри разные уровни напряжения и по идее их нужно согласовать, советую ознакомиться со статьей .

Хотя у меня все заработало напрямую без согласования, не следует подражать плохому примеру и приобрести преобразователь логических уровней, самый простой выглядит так:

Или хотя бы собрать делитель напряжения на резисторах.

Запуск

Все готово, можно начинать.

Проверяем все соединения, вкючаем raspberry pi, переходим в консоль малины, запускаем minicom. Сразу оговорюсь я подключался к малине через ssh, в качестве клиента использовал KiTTY(модифицированную версию PuTTY), это важно т.к. с другими терминалами значения передаваемых клавиш могут быть иными и соответственно нужно будет сделать поправку на ветер - поменять номер перехода switch case.

В общем передаю вам в руки как говорится «as is». Что ж на этом пожалуй закончу, самодельный IP KVM готов.

P. S.

На последок опишу что получилось в сухом остатке.

Плюсы:

- Цена
- Устройство получилось относительно недорогим
- Raspberry Pi: примерно 2700руб.
- Arduino UNO: примерно 400руб.
- VGA to AV конвертер: примерно 700руб.
- Плата видеозахвата: 500руб.
- Итого: 4300руб.

- Тонкая настройка
Можно перехватывать практически любые комбинации и назначать на них практически любые клавиши вплоть до KEYBOARDPOWER и VOLUMEUP, кстати возможные значения можно посмотреть в заголовочном файле HIDKeyboard.h, а можно и добавить свои.

Минусы:

- Торможение как видео, так и передачи нажатий
- Второй и самый большой это качество изображения , здесь просто необходим грустный смайлик, оно ужасно, даже если убавить разрешение на целевом компьютере до минимума, максимум что можно будет сделать, это настроить БИОС и выбрать пункт в загрузчике. Но разве собственно не для этого нужен KVM?.. А для всего остального существует радмин и ему подобные.

Теги: Добавить метки

Сразу после того, как дома появилось больше одного компьютера, у меня возникло желание избавить себя от постоянного переключения клавиатур и мышек в разные системные блоки. Поэтому я решил приобрести замечательное устройство, о котором я писал в прошлой статье - KVM-switch или KVM переключатель.

За скромную плату в 477 рублей китайские друзья прислали эту замечательную вещь по почте. Я сделал несколько фотографий, чтобы показать вам, и отправил переключатель на свое законное место, в котором он пробудет долгое время, пока не покроется толстенным слоем пыли или не сломается раньше.

Все содержимое посылки - это 2-портовый KVM и 2 специальных провода для подключения к компьютерам. Китайцы не пожалели упаковочной пленки, поэтому все доехало в сохранности.

На фото ниже видно, что переключатель имеет 3 разъема VGA (один на монитор и 2 для системных блоков), а также 3 порта USB. Благодаря им помимо клавиатуры и мышки мы можем подключить еще, например, принтер, который будет также переключаться от компьютера к компьютеру вместе с остальной периферией.

На верхней крышке устройства имеется крупная кнопка переключения, которую легко найти в темноте. А ведь многие компьютерщики любят работать именно по ночам и, кстати говоря, очень зря (кому интересно почему - читаем мою статью). Также на корпусе имеется 2 светодиодных индикатора, которые сообщают о том, какой порт сейчас используется. На обратной стороне KVM-switch имелась наклейка, сообщающая что устройство может работать с разрешением до 1920×1440.

Подключение устройства происходит по следующей схеме:

Я расположил KVM прямо на столе, чтобы можно было легко дотянуться до него рукой. В итоге рабочее пространство вокруг переключателя выглядит следующим образом:

После первого запуска я получил небольшой сюрприз в виде размытого и тусклого изображения. Пользоваться монитором с такой картинкой можно только в том случае, если вы хотите в считанные дни посадить свое зрение.

Первым делом я подумал на сам Switch, но, поискав информацию в интернете, понял что виновниками являются некачественные кабели, которые шли в комплекте. А ведь именно это стало решающим фактором в выборе этого заказа! Опять китайцы налюбили!

Для себя я нашел следующий выход: я подключил кабели от системных блоков напрямую в монитор, так как на мониторе у меня имеется 2 входа (dvi и vga), а переключение между ними осуществляется нажатием кнопки на самом мониторе. Таким образом, для переключения к управлению другим компьютером вместо одной кнопки на kvm мне приходится нажимать еще и кнопку на мониторе для переключения «картинки».

Для тех, у кого нет нужных выходов на мониторе, есть еще одно простое решение. Достаточно вместо проводов, которые шли в комплекте, использовать обычные vga-кабели и вместе с ними провода usb A - usb B (такими подключается большинство современных принтеров). Думаю, этим способом я и буду пользоваться, как только приобрету 2 нужных кабеля USB. При таком способе мы полностью сохраняем функциональность устройства.

В целом у меня сложились положительные впечатления от использования kvm, ведь штука действительно полезная, хотя и остался осадок от бесполезности комплектных проводов. Если решите заказывать себе такой же, советую брать только один kvm переключатель, чтобы не рисковать и не переплачивать за провода.

Если у вас остались вопросы, задавайте их в комментариях, я с удовольствием отвечу на них.



Рекомендуем почитать

Наверх