From bee12db7f24130d6129be60e6a4dfe6bff8fb3be Mon Sep 17 00:00:00 2001 From: icewind Date: Sun, 19 Apr 2026 22:42:53 +0300 Subject: [PATCH] Add guide for configuring F1-F12 on Apple-compatible keyboards in Linux --- README.md | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..3159b20 --- /dev/null +++ b/README.md @@ -0,0 +1,136 @@ +# Настройка 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-идентификацию, поэтому проблема решается только на уровне параметра модуля ядра.