Управление индикаторами Caps/Num/Scroll Lock в Ubuntu Server

Изображение пользователя Unit_abs.

Доброго времени суток.

Сегодня натолкнулся на статью "Включение чего угодно по HTTP без заморочек c OpenWRT" (Хабр)

Суть статьи из названия понятна, решено с помощью роутера с usb, клавиатуры(ее платы). На роутере поднимается OpenWRT. К роутеру цепляется клавиатура. На клавиатуре включается индикатор "Caps Lock" командой типа:
cat /dev/input/event0 > /dev/null &
printf "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x01\x00\x00\x00\x01" > /dev/input/event0

В статье дается как пишет автор "сумбурное пояснение" команды.
И для управления всем этим этим поднимается, скажем сайт.

Решил сделать что то подобное на своей машине с Kubuntu 12.04.1., а после перенести на неттоп который используется в качестве домашнего сервера с Ubuntu Server.

По сумбурному описанию, я не совсем понял как включился Caps и решил попробовать другим методом.
Попробовал управлять лампочками через xset, работает, но требует иксов.
Попробовал numlockx, работает, но требует иксов.

Вернулся к статье, решил разобраться.
Подключая клавиатуру dmesg и lsusb показывают,что она подключена.

Проверяю event

Получается мы получили event в /dev/input/by-id/, но на всякий случай проверяем(hexdump, printf) все, но везде пусто.

Собственно вопрос, каким методом еще можно управлять индикаторами без иксов? Может есть какая консольная программа, или кто то видит ошибку в моих действиях с event-ами? Так же подумал использования напрямую /dev/bus/usb/, но пока ничего внятного не нашел.

Прошу посильной помощи, в виде двух уделенных минут на комментарий, кому тема показалась интересной, или знакомой.
Заранее спасибо.

+1
dyug - 5 Октябрь, 2012 - 21:00

мысля забавная, я как раз копировал себе в скрапбук эту статью.
В принципе - желательно понять, какой именно интерфейс из инпутов ведет к блоку индикации...
подробно - не скажу. не разбирался, мне как раз задача отдельной железяки интересна..
домашний роутер использует pport, но там старый дебиан, умеющий дергать каждый из 8 бит параллельного порта. :-)

гмм, проверил, ввод с клавиатуры видит, но светодиод не загорается. :-(
обнаружить какой эвент отвечает можно с помощью или мс, или ls
ls -la /dev/input/by-id/usb-0566_3107-event-*
lrwxrwxrwx 1 root root 9 Окт  5 18:52 /dev/input/by-id/usb-0566_3107-event-if01 -> ../event4
lrwxrwxrwx 1 root root 9 Окт  5 18:52 /dev/input/by-id/usb-0566_3107-event-kbd -> ../event3

вот так у меня идут ссылки на эвенты

да, проверил - 3 эвент, клавиатура, 4 - кнопки мультимедии и прочих...

0
Unit_abs - 6 Октябрь, 2012 - 11:11
Изображение пользователя Unit_abs.

Спасибо, отловил event, и через cat /dev/input/event6 | hexdump, например включение Caps Lock

Но не могу понять как автор получает строку вывода на клавиатуру
cat /dev/input/event0 > /dev/null &
printf "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x01\x00\x00\x00\x01" > /dev/input/event0

именно
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x01\x00\x00\x00\x01"

0
Unit_abs - 6 Октябрь, 2012 - 11:39
Изображение пользователя Unit_abs.

Разобрался, отправил, такая же картина, ввод видит, а светодиод не горит.

+1
mft - 6 Октябрь, 2012 - 13:59

setleds

0
Unit_abs - 6 Октябрь, 2012 - 14:41
Изображение пользователя Unit_abs.

Спасибо, можно и так. Только приходится гонять в tty.

0
mft - 6 Октябрь, 2012 - 15:04

Ну дак ты и просил без иксов.

0
pavik - 19 Август, 2016 - 13:19

Понимаю, что тема старая, но все же...

Понадобилось такое-же управление, и тоже не работает printf.
Как оказалось, автор статьи на хабре допустил ошибку и в примере с printf, и в своем скрипте.
Он везде вставляет сначала старший байт, а потом младший, хотя надо наоборот. Например, у него
EV_LED="\x00\x11"
LED_NUML="\x00\x00"
LED_CAPSL="\x00\x01"
LED_SCROLLL="\x00\x02"
TURN_ON="\x00\x00\x00\x01"
TURN_OFF="\x00\x00\x00\x00"

а правильно надо так
EV_LED="\x11\x00"
LED_NUML="\x00\x00"
LED_CAPSL="\x01\x00"
LED_SCROLLL="\x02\x00"
TURN_ON="\x01\x00\x00\x00"
TURN_OFF="\x00\x00\x00\x00"

И рабочий printf должен быть таким:

num_on:   printf "\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00"
num_off:  printf "\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00"
caps_on:  printf "\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x01\x00\x01\x00\x00\x00"
caps_off: printf "\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x01\x00\x00\x00\x00\x00"
scrl_on:  printf "\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x02\x00\x01\x00\x00\x00"
scrl_off: printf "\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x02\x00\x00\x00\x00\x00"

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры