5.3 KiB
Настройка 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
lsusb | grep -i apple
Пример вывода:
Bus 002 Device 003: ID 05ac:024f Apple, Inc. Aluminium Keyboard (ANSI)
VID 05ac — это Apple. Значит, модуль hid_apple подхватит устройство.
2. Проверить текущий режим
cat /sys/module/hid_apple/parameters/fnmode
Если видишь 1 или 3 — поведение именно то, что описано в проблеме.
Решение
Шаг 1. Применить изменение немедленно (без перезагрузки)
echo 2 | sudo tee /sys/module/hid_apple/parameters/fnmode
Проверить сразу на любой клавише F1-F12. Должны сработать напрямую, мультимедиа — через Fn.
Шаг 2. Закрепить настройку навсегда
Создать файл конфигурации модуля:
echo 'options hid_apple fnmode=2' | sudo tee /etc/modprobe.d/hid_apple.conf
Шаг 3. Пересобрать initramfs
Чтобы параметр применялся и при загрузке (на случай, если hid_apple попадает в initramfs):
Ubuntu / Debian:
sudo update-initramfs -u
Fedora / RHEL / openSUSE:
sudo dracut --force
Arch:
sudo mkinitcpio -P
Шаг 4. Одной строкой (Debian/Ubuntu)
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"
Проверка
После применения:
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
Посмотреть все доступные параметры:
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
Откат
Если нужно вернуть как было:
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-идентификацию, поэтому проблема решается только на уровне параметра модуля ядра.