суббота, 5 июля 2014 г.

Привычное поведение функциональных клавиш на Logitech Comfort Keyboard K290

При очередной закупке железа довелось столкнуться с клавиатурами Logitech Comfort Keyboard K290. Отличные клавиатуры, что в принципе ожидаемо для продукции Logitech, если бы не одно НО. Я не сразу сообразил, почему у меня не получается войти в меню выбора загрузочных устройств (F8 или F12 на большинстве BIOS). После внимательного изучения клавиатуры стало ясно что теперь по-умолчанию функциональные клавиши действуют как мультимедийные, а для привычного поведения нужно нажимать комбинацию FN+F12. Это поведение программируется и раньше по-умолчанию было наоборот.

Печалит что подобное нововведение не упоминается на странице описания продукта, а указано лишь в прилагавшейся инструкции. Для решения проблемы Logitech предлагает установить утилиту Setpoint, чтобы перепрограммировать поведение клавиш. Поразительно, но standalone инсталятор для одной архитектуры (x86 или amd64) занимает примерно 80M! Что они туда напихали для меня остается загадкой, ну да ладно... Однако после смены настроек они сохраняются только до выключения компьютера. Т.е. нет сохранения настроек в самой клавиатуре (помнится настройки клавиатур Compaq с "Erase Ease" сохранялось в самой клавиатуре).

Если под Windows производитель худо-бедно позаботился о пользователях, то под Linux все сложнее. Я нашел проект k290-fnctl на GitHub'е который предназначен для программирования поведения функциональных клавиш. Чтобы собрать утилиту нужно проделать следующее:

$ sudo apt-get install g++ libusb-1.0-0-dev
$ git clone https://github.com/milgner/k290-fnkeyctl
$ cd k290-fnkeyctl
$ g++ -std=c++11  k290_fnkeyctl.cpp -lusb-1.0 -o k290_fnkeyctl
$ sudo install -o root -g root -m 0755 ./k290_fnkeyctl /usr/local/sbin
$ sudo install -o root -g root -m 0644 ./99-k290-config.rules /etc/udev/rules.d
$ sudo udevadm control --reload-rules
$ sudo udevadm trigger --subsystem-match=input

Примечательно, что размер полученного бинарника всего 59K. После этого все начинает работать и в Linux.

14 комментариев:

  1. Здравствуйте! Недавно купил клавиатуру logitech Comfort Keyboard K290. Под windows без проблем настроил клавиши F1-F12, но в Ubuntu не могу! Выполнил команды:
    $ sudo apt-get install g++ libusb-1.0-0-dev
    $ git clone https://github.com/milgner/k290-fnkeyctl
    $ cd k290-fnkeyctl

    Затем выполнил команду:
    $ g++ -std=c++11 -lusb-1.0 -o k290_fnkeyctl k290_fnkeyctl.cpp
    И вот, что выводит в консоли:
    http://pastebin.com/GbD0HRMh
    В общем, "неопределенные ссылки".

    Как исправить эту проблему?

    ОтветитьУдалить
    Ответы
    1. Попробуйте такую команду компиляции

      g++ -std=c++11 k290_fnkeyctl.cpp -lusb-1.0 -o k290_fnkeyctl

      Удалить
    2. Большое Спасибо!
      После выполнения:
      $ g++ -std=c++11 k290_fnkeyctl.cpp -lusb-1.0 -o k290_fnkeyctl
      всё без ошибок скомпилировалось и теперь клавиши F1-F12 нормально работают!

      Удалить
  2. а как сделать, если я хочу на оборот что б нажал на f11 и звук увеличился?
    а то приходится нажимать fn
    клавиатура k280e

    ОтветитьУдалить
    Ответы
    1. Готового решения я не знаю.

      Универсальное решение:
      1) поставить в виртуалку windows
      2) установить утилиту, которая умеет нужный функционал (Logitech SetPoint вроде)
      3) снять сниффером обмен через USB и написать утилиту для переключения

      Возможно поменять клавиатуру будет проще всего.

      Удалить
  3. спасибо, работает. но только если отправляешь комп в хибернейт а потом выходишь из него, то опять не работает.

    ОтветитьУдалить
    Ответы
    1. Для suspend/hibernate я использовал хук для pm-tools, который применял настройки после пробуждения. С появлением systemd нужно писать unit. Я когда-то делал это, но файлик не сохранился.

      Удалить
    2. Ошибся: не pm-tools, а pm-utils.

      Создайте файл /etc/pm/sleep.d/k290_fnkeyctl и сделайте его исполняемым:

      #!/bin/sh
      test -x /usr/local/sbin/k290_fnkeyctl || exit 0
      case $1 in
        resume|thaw)
          /usr/local/sbin/k290_fnkeyctl
        ;;
        *)
          :
          ;;
      esac

      Удалить
  4. Ответы
    1. Думаю вам сюда: http://support.logitech.com/en_us/software/logitech-control-center-for-macintosh-os-x

      Удалить
    2. Это только для беспроводных( Для данной клавиатуры ПО только под мастдай есть
      Придется и дальше так жить. Такую клавиатуру запороли(

      Удалить
    3. Ну раз так, то libusb под mac есть - думаю скомпиливать большой проблемы не составит.

      Удалить