Files

137 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Настройка F1-F12 на Apple-совместимых клавиатурах в Linux
## Проблема
На клавиатуре (в т.ч. на клонах Apple Aluminium Keyboard — например, SONiX с USB ID `05ac:024f`) клавиши `F1`-`F12` не работают напрямую: по умолчанию они выдают мультимедиа-функции (громкость, яркость, плеер), а чтобы получить сам `F1` — нужно зажимать `Fn`.
Переключатель **Mac/Win** на самой клавиатуре этого НЕ решает — он меняет только раскладку `Alt`/`Win` (`Cmd`/`Option`), а USB-идентификатор остаётся Apple'овским, и ядро Linux продолжает грузить модуль `hid_apple`.
## Причина
Поведение F-клавиш контролируется параметром `fnmode` модуля ядра `hid_apple`:
| Значение | Поведение |
|----------|-----------|
| `0` | модуль отключён, F-клавиши = F-клавиши всегда |
| `1` | мультимедиа первичные, F-клавиши через `Fn` |
| `2` | **F-клавиши первичные, мультимедиа через `Fn`** ← то, что нужно |
| `3` | авто — для внешних Apple-клавиатур ведёт себя как `1` (по умолчанию в новых ядрах) |
## Диагностика
### 1. Проверить, что клавиатура определяется как Apple
```bash
lsusb | grep -i apple
```
Пример вывода:
```
Bus 002 Device 003: ID 05ac:024f Apple, Inc. Aluminium Keyboard (ANSI)
```
VID `05ac` — это Apple. Значит, модуль `hid_apple` подхватит устройство.
### 2. Проверить текущий режим
```bash
cat /sys/module/hid_apple/parameters/fnmode
```
Если видишь `1` или `3` — поведение именно то, что описано в проблеме.
## Решение
### Шаг 1. Применить изменение немедленно (без перезагрузки)
```bash
echo 2 | sudo tee /sys/module/hid_apple/parameters/fnmode
```
Проверить сразу на любой клавише `F1`-`F12`. Должны сработать напрямую, мультимедиа — через `Fn`.
### Шаг 2. Закрепить настройку навсегда
Создать файл конфигурации модуля:
```bash
echo 'options hid_apple fnmode=2' | sudo tee /etc/modprobe.d/hid_apple.conf
```
### Шаг 3. Пересобрать initramfs
Чтобы параметр применялся и при загрузке (на случай, если `hid_apple` попадает в initramfs):
**Ubuntu / Debian:**
```bash
sudo update-initramfs -u
```
**Fedora / RHEL / openSUSE:**
```bash
sudo dracut --force
```
**Arch:**
```bash
sudo mkinitcpio -P
```
### Шаг 4. Одной строкой (Debian/Ubuntu)
```bash
sudo sh -c "echo 'options hid_apple fnmode=2' > /etc/modprobe.d/hid_apple.conf && echo 2 > /sys/module/hid_apple/parameters/fnmode && update-initramfs -u"
```
## Проверка
После применения:
```bash
cat /sys/module/hid_apple/parameters/fnmode
# ожидаем: 2
cat /etc/modprobe.d/hid_apple.conf
# ожидаем: options hid_apple fnmode=2
```
И физически нажать `F1` в терминале или в браузере (`F5` — обновление, `F11` — полноэкранный режим) — должно работать без `Fn`.
## Дополнительные параметры `hid_apple`
Посмотреть все доступные параметры:
```bash
ls /sys/module/hid_apple/parameters/
```
Полезные:
| Параметр | Назначение |
|----------|------------|
| `fnmode` | поведение F-клавиш (см. выше) |
| `iso_layout` | ISO-раскладка vs ANSI |
| `swap_opt_cmd` | поменять местами `Option` и `Cmd` |
| `swap_ctrl_cmd` | поменять местами `Ctrl` и `Cmd` |
| `swap_fn_leftctrl` | поменять местами `Fn` и левый `Ctrl` |
Пример — положить все нужные опции в тот же конфиг:
```
options hid_apple fnmode=2 swap_opt_cmd=1
```
## Откат
Если нужно вернуть как было:
```bash
sudo rm /etc/modprobe.d/hid_apple.conf
echo 3 | sudo tee /sys/module/hid_apple/parameters/fnmode
sudo update-initramfs -u
```
## Почему так «по-apple»?
На маках F-клавиши по умолчанию работают как медиа-клавиши — так задумано Apple. Клоны и совместимые клавиатуры, прикидывающиеся Apple'ом по USB VID/PID, наследуют это поведение через драйвер `hid_apple` в Linux. Переключатель Mac/Win на корпусе меняет только маппинг `Cmd`/`Win` и не влияет на USB-идентификацию, поэтому проблема решается только на уровне параметра модуля ядра.