LINUX.ORG.RU

Переключатель клавиатуры LoLo Switcher v.0.15


0

1

Выпущен первый публичный релиз низкоуровневого переключателя клавиатуры LoLo Switcher v.0.15 для оконной системы X11.

Основные достоинства переключателя:

  • cпособен работать в любых окружениях рабочего стола (KDE3, KDE4, GNOME2, LXDE);
  • работает напрямую с устройством ввода, очень компактен и быстр;
  • поддерживает любые модели клавиатур и джойстиков;
  • способен прозрачно работать параллельно с другими переключателями клавиатуры;
  • содержит встроенные средства диагностики устройств ввода.

Данный переключатель решает застаревшие проблемы, которые вынуждают пользователей Linux безальтернативно использовать клавишу CapsLock как самую беспроблемную. Программа спроектирована так, что её можно настроить на любое устройство ввода (сейчас поддерживается клавиатура и джойстик), на любую комбинацию действий с любой логикой срабатывания.

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

В плане развития указывается на добавление обработки клавиатурных событий среды X11, благодаря чему LoLo Switcher будет полноценным X11-приложением, способным предоставить свой функционал при удалённом подключении к X-серверу. Для этого автору нужна помощь сообщества, так как ему неизвестен работающий способ получения клавиатурных событий от всех окон на рабочем столе.

Автор использует LoLo Switcher для переключения между RUS/LAT с помощью правого и левого SHIFT. Обсуждение такого способа переключения можно найти на ЛОРе.

Официальная страница программы LoLo Switcher

Руководство по конфигурированию LoLo Switcher

Видео с демонстрацией работы LoLo Switcher на YouTube

Новость на сайте автора

Перемещено svu из OpenSource



Последнее исправление: adriano32 (всего исправлений: 3)
Ответ на: комментарий от webhamster

Это переключалка и работать она должна от пользователя (всё таки не в винде работаем чтоб всё из под рута запускать), так что надо как-то что-то делать, чтобы был прямой доступ без поднятия привелегий для переключалки.

PS. Всем вопрос, как и чем выставляются права на /dev/input/event*?

daemonpnz ★★★★★
()
Ответ на: комментарий от daemonpnz

>PS. Всем вопрос, как и чем выставляются права на /dev/input/event*?

Эм. udev? Мануалы по его рулезам — в интернете.

x3al ★★★★★
()
Ответ на: комментарий от x3al

В современных десктопных дистрибутивах есть *kit'ы для подобного функционала, но я их не тыкал. В теории они тырпрайзнее.

x3al ★★★★★
()
Ответ на: комментарий от x3al

Ага, спасиб, уже нашёл.
Нужно создать файл /etc/udev/rules.d/51-evdev-users.rules следующего содержания

# input
KERNEL=="mouse*|mice|event*", MODE="0644"

daemonpnz ★★★★★
()
Ответ на: комментарий от daemonpnz

Ага, спасиб, уже нашёл.
Нужно создать файл /etc/udev/rules.d/51-evdev-users.rules следующего содержания

# input
KERNEL=="mouse*|mice|event*", MODE="0644"

Теперь запуск кейлоггера становится тривиальной задачей! =)

Deleted
()
Ответ на: комментарий от no-dashi

Например, xneur и так прекрасно работает из-под пользователя и ведёт кейлоги, да ещё и подписывает, что и в каком окне было введено.

daemonpnz ★★★★★
()
Ответ на: комментарий от daemonpnz

Это переключалка и работать она должна от пользователя (всё таки не в винде работаем чтоб всё из под рута запускать), так что надо как-то что-то делать, чтобы был прямой доступ без поднятия привелегий для переключалки.

Тут уже объяснили, что выставлением прав KERNEL==«mouse*|mice|event*», MODE=«0644» проблему не решишь.

Я забыл сказать, что в LoLo Switcher при выполнении башевых команд, прописанных в опциях CommandX, происходит понижение прав до пользователя, запустившего бинарник loloswitcher. То есть эти команды выполняются от пользователя, а не от рута.

Пруф:

 bool changeAccess=false;
 int uid=getuid();
 int euid=geteuid();

 // Проверяется, работает ли программа в режиме SUID
 if(uid != euid)
  changeAccess=true; // Если установлен бит SUID, надо менять режим доступа

 // Если надо поменять режим доступа, меняется эффективный ID 
 // на ID пользователя, который запустил программу
 if(changeAccess)
  seteuid( uid );

 // printf("Value in thread: getuid()=%d, geteuid()=%d\n", getuid(), geteuid());
 // printf("Run command %s\n", cmd);

 // Команда выполняется
 if(popen(cmd, "r")==NULL)
  printf("Can't run command: %s\n", cmd);

 // Если режим доступа был изменен, эффективный UID возвращается в прежнее состояние
 if(changeAccess)
  seteuid( euid );

Так что тут с безопасностью всенормально.

webhamster
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.