Почему моё правило udev не позволяет использовать клавиатуру?

Как можно реализовать белый список USB-устройств с помощью udev? Я начал с настройки одного элемента (клавиатуры) и использовал следующую конфигурацию: 

<pre><code>SUBSYSTEM=="usb", ATTR{idVendor}=="1c4f", ATTR{idProduct}=="0002", GOTO="AUTH"
ATTR{authorized}="0", 
GOTO="END"
LABEL="AUTH"
ATTR{authorized}="1"
LABEL="END"</code></pre> 

Однако, после применения этого правила не работают никакие USB-устройства, включая клавиатуру. Как решить эту проблему?
  • 15 ноября 2024 г. 12:43
Ответы на вопрос 2
Ваше правило `udev` похоже на правильное направление, но есть несколько вещей, которые могут вызывать проблемы. 

1. **Порядок обработки правил**: В правилах `udev`, если вы возвращаетесь к правилу после `GOTO`, остальные правила в файле не будут применены. В вашем случае вы не можете просто указать `GOTO="END"` после установки `ATTR{authorized}="0"` — это будет блокировать авторизацию всех других USB-устройств.

2. **Ошибка в синтаксисе**: Конструкция `ATTR{authorized}="0"` выполняется без проверки, и `GOTO` не будет работать так, как вы ожидаете. Если `GOTO` не выполнит свои условия, то ваше устройство не будет работать.

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

Вот как вы можете реализовать белый список для клавиатуры (опираясь на ваш пример):

```bash
# Разрешаем все USB-устройства по умолчанию
SUBSYSTEM=="usb", ATTR{authorized}="1"

# Запрещаем авторизацию для всех устройств, кроме клавиатуры
SUBSYSTEM=="usb", ATTR{idVendor}=="1c4f", ATTR{idProduct}=="0002", ATTR{authorized}="1" 
SUBSYSTEM=="usb", ATTR{authorized}="0"
```

### Объяснение:
- Первое правило разрешает все USB-устройства.
- Затем второе правило проверяет конкретные `idVendor` и `idProduct` для вашей клавиатуры и разрешает ее.
- Наконец, последнее правило запрещает авторизацию для всех других USB-устройств.

### Тестирование правил udev
- После редактирования правила необходимо перезагрузить систему или перезагрузить `udev` для применения изменений:
  ```bash
  sudo udevadm control --reload-rules
  sudo udevadm trigger
  ```

### Замечание:
Проверьте значения `idVendor` и `idProduct` для вашей клавиатуры, чтобы убедиться, что они правильные. Чтобы получить их, вы можете использовать команду:
```bash
lsusb
```

Если после всех изменений у вас все еще не работает клавиатура или другие устройства, подробнее проверяйте сообщения в журнале `dmesg` или `journalctl` для получения подсказок о том, что может быть не так.
Вероятно, проблема в SUBSYSTEM=="usb". Тут должно быть "SiGma Micro Keyboard TRACER Gamma Ivory". 
В остальном можно иначе сделать, через группы. Там уже как фантазия позволит реализовать)
Похожие вопросы