Вопрос или проблема
Я только недавно узнал о магических системных клавишах запроса. Как мне использовать их с клавиатуры на Mac с установленной ОС на базе Linux, или в других случаях, когда на клавиатуре нет клавиши SysReq? Существует ли последовательность, эквивалентная meta–SysReq, или способ ее создания?
Без клавиши, генерирующей тот же скан-код, которую у вас нет, единственный вариант – это echo <char> > /proc/sysrq-trigger
, где <char>
– это клавиша, которую вы бы нажали вместе с M-SysRq
. (Это, конечно, предполагает, что вы запускаете ядро с компилированной в него магической SysRq, и ранее выполнили echo 1 > /proc/sys/kernel/sysrq
в /etc/rc.local
или подобном.)
Если вы хотите получить настоящую функциональность магической SysRq, а не бледное подобие, получаемое путем эхо в случайные записи /proc, вам нужно найти себе USB-клавиатуру в стиле ПК с клавишей SysRq. Linux правильно интерпретирует скан-код независимо от того, на какой архитектуре он работает; сложность в данном случае заключается в генерации скан-кода, что невозможно сделать с обычной клавиатуры Mac.
(С другой стороны, вероятно, ядро можно скомпилировать так, чтобы оно распознавало другой скан-код, например, код клавиши извлечения Mac вместо SysRq; я никогда не испытывал желание понизить свою MBP, так что не знаю из первых рук, но предполагаю, что кто-то это делал. Или, возможно, вы будете первым; в конце концов, самостоятельный хак ядра – это половина удовольствия от использования Linux, насколько я понимаю.)
Обновление: Очевидно, это можно сделать из пользовательского пространства:
Лучше всего на данный момент установить (вручную скомпилировать) программу keyfuzz и добавить
echo "786616 99" | keyfuzz -s -d /dev/input/by-id/usb-Apple_Inc._Apple_Internal_Keyboard___Trackpad-event-kbd
в ваш /etc/profile, например. Это сопоставляет Alt-Eject на типичном Apple Macbook Pro (мой середина 2010, 6,2) с комбинацией Alt-SysRq.
Если вы хотите получить больше старомодного “двурукого опыта использования Linux”, в том комментарии есть ссылки на некоторые патчи ядра, которые могут быть полезны для переназначения кодов клавиш на уровне ядра.
Этот ответ также опубликован здесь.
После 3 или 4 часов упорных поисков, чтения и метода проб и ошибок, вот более подробный и универсальный ответ, который должен работать для любого ноутбука или клавиатуры Apple/Mac. В моем конкретном случае, однако, я использую это решение для MacBook белого 2008 года с запущенной Xubuntu 16.04 LTS.
Большое спасибо Бенгту Олссону за его отличные инструкции здесь, которые дали мне необходимый старт для выяснения недостающих деталей.
Это решение выполняется в пользовательском пространстве и не требует перекомпиляции ядра, как некоторые предложения.
-
Скачайте исходный код для keyfuzz (http://0pointer.de/lennart/projects/keyfuzz/keyfuzz-0.2.tar.gz), и извлеките его (я могу щелкнуть правой кнопкой мыши и выбрать “Извлечь сюда”, чтобы извлечь его в моем графическом файловом менеджере, например). Чтобы узнать больше о keyfuzz, см. здесь. Он выпущен под лицензией GNU GPL 2.0 или более поздней версией открытого исходного кода (ура, открытый исходный код!).
- Не используйте слишком глубокую директорию (или с возможными пробелами), иначе команда
./configure
ниже завершится ошибкой.
- Не используйте слишком глубокую директорию (или с возможными пробелами), иначе команда
-
Установите зависимости, иначе выполнение
./configure
ниже может выдать некоторые ошибки:sudo apt-get update sudo apt-get install lynx xmltoman gengetopt
-
Скомпилируйте и установите keyfuzz с помощью обычных команд:
./configure make sudo make install
-
Перейдите в
/dev/input/by-id
и найдите вашу клавиатуру Apple, которая заканчивается на “-event-kbd”:cd /dev/input/by-id ls
- Для меня это “usb-Apple_Computer_Apple_Internal_Keyboard___Trackpad-event-kbd”
-
Добавьте следующую строку в ваш файл
/etc/rc.local
(см. примечание ниже), чтобы эта команда запускалась каждый раз при загрузке компьютера и входе в систему. Обратите внимание, что мы используем обнаруженную выше запись клавиатуры Apple. Эта команда использует keyfuzz, чтобы сопоставить F12 или F13 на вашей клавиатуре или ноутбуке Apple с системной “магической SysRq клавишей“ для мягкой перезагрузки.-
Чтобы сопоставить F12 с SysRq:
458821 99
. Большое спасибо “pjjjv” за выяснение этого здесь! https://ubuntuforums.org/archive/index.php/t-762665.html -
Чтобы сопоставить F13 с SysRq:
458856 99
. -
Поскольку мой MacBook 2008 года не имеет F13, я использую опцию F12 выше. Также не забудьте использовать правильную запись клавиатуры, которую мы нашли выше. Команда, которую я добавил в
rc.local
для своего случая, это:echo "458821 99" | keyfuzz -s -d /dev/input/by-id/usb-Apple_Computer_Apple_Internal_Keyboard___Trackpad-event-kbd
. -
Примечание: в последних версиях Ubuntu файл
/etc/rc.local
отсутствует по умолчанию, но, как объяснено в этом ответе и этом ответе, он используется, если 1) существует, 2) исполним хотя бы пользователем root и 3) содержит шебанг вверху, например#!/bin/sh -e
. Убедитесь, что файл принадлежит root и исполним (sudo gedit /etc/rc.local
ИЛИgedit /etc/rc.local
с последующимsudo chown root:root rc.local
; затемsudo chmod u+x /etc/rc.local
). -
Вот мой полный файл
/etc/rc.local
, с соответствующей записью:
#!/bin/sh -e # # rc.local # # Этот скрипт выполняется в конце каждого многопользовательского уровня выполнения. # Убедитесь, что скрипт завершится "exit 0" при успешном выполнении или любое другое # значение при ошибке. # # Чтобы включить или отключить этот скрипт, достаточно изменить его права на выполнение. # # По умолчанию этот скрипт ничего не делает. echo "458821 99" | keyfuzz -s -d /dev/input/by-id/usb-Apple_Computer_Apple_Internal_Keyboard___Trackpad-event-kbd exit 0
-
-
Перезагрузитесь.
Теперь я могу нажимать Alt + F12 (или вы можете использовать Alt + F13, как указано выше) и выполнять REISUB
(REISUB) для мягкой перезагрузки компьютера. Это отлично работает на моем ноутбуке MacBook 2008 года с Xubuntu 16.04 LTS.
Обратите внимание, что вы можете увидеть результаты выполнения REISUB
, нажимая каждую клавишу, сначала перейдя на альтернативную сессию с помощью Ctrl + Alt + F1 (F1 по F6 тоже работают) перед выполнением команды. Чтобы вернуться к основной сессии X Window, используйте Ctrl + Alt + F7.
Если вы получаете результат, который говорит “Эта операция sysrq отключена”, это нормально для нескольких команд, так как они представляют потенциальный риск безопасности. Однако команда загрузки должна по-прежнему работать, позволяя вам мягко перезагрузить компьютер. Вот некоторая дополнительная информация об этом, от mniess здесь:
Начиная с Ubuntu 12.10, возможен более точный контроль над тем, какие функции Magic- SysRq включены. Просто отредактируйте файл /etc/sysctl.d/10-magic-sysrq.conf.
Файл хорошо задокументирован и точно говорит вам, как включить какие функции. Текущий параметр по умолчанию был выбран из соображений безопасности и должен изменяться только тогда, когда вы точно знаете, зачем вам это нужно (по соображениям безопасности см. ошибку №194676).
Это не магическая клавиша sysreq, но если вы хотите перезагрузить или выключиться в случае замерзания, вы можете использовать клавиши сброса SMC.
Ctrl + Shift + Option + Кнопка питания
.
Ответ или решение
Вопрос, касающийся использования магических клавиш SysRq на клавиатуре Mac при установке Linux или в случаях, когда клавиатура не имеет клавиши SysRq, представляет собой довольно специфическую задачу, с которой сталкиваются пользователи, желающие использовать специальные функции Linux на аппаратуре, изначально не предназначенной для этих целей.
Теория
Магические клавиши SysRq – это уникальная функция ядра Linux, которая предоставляет набор команд для управления системой на низком уровне при помощи специальной комбинации клавиш на клавиатуре. Первоначально разработанные для быстрого взаимодействия с системой в случаях экстренных ситуаций, они позволяют выполнять операции, такие как безопасная перезагрузка, сброс разделов памяти, четкое завершение задач и многое другое. Эти команды особенно полезны, когда система зависла или не отвечает, и обычные методы выключения или перезагрузки не работают.
Пример
На обычной ПК-клавиатуре, использование магических клавиш SysRq предполагает нажатие на комбинацию клавиш Alt + SysRq, после чего вводится соответствующая команда (например, R-E-I-S-U-B для безопасной перезагрузки). Однако клавиатуры Mac не имеют отдельной клавиши SysRq. Это значит, что пользователям необходимо искать альтернативные способы вызова этих же функций, особенно если они используют Linux на Mac.
Применение
Существует несколько способов использования этих функций на Mac под управлением Linux:
-
Использование keyfuzz:
-
keyfuzz
— это утилита, позволяющая переназначить коды клавиш, чтобы имитировать нажатие SysRq. Это можно сделать, скомпилировав утилиту вручную и создав скрипт, который будет выполняться при загрузке системы:-
Сначала скачайте и распакуйте утилиту keyfuzz с официального сайта.
-
Установите необходимые зависимости:
sudo apt-get update
иsudo apt-get install lynx xmltoman gengetopt
. -
Скомпилируйте и установите
keyfuzz
: выполните команды./configure
,make
, иsudo make install
. -
Найдите ваше устройство клавиатуры в каталоге
/dev/input/by-id
, заканчивающееся на "-event-kbd". -
Добавьте строку для переназначения, например, для клавиши F12:
echo "458821 99" | keyfuzz -s -d /dev/input/by-id/ваше_устройство
. -
Для автоматического выполнения этой команды при загрузке добавьте ее в файл
/etc/rc.local
.
-
-
-
Редактирование конфигурационного файла sysctl: Измените файл
/etc/sysctl.d/10-magic-sysrq.conf
для точной настройки доступных функций SysRq в зависимости от ваших нужд. -
Аппаратные комбинации клавиш для Mac: В крайних случаях, когда необходимо выполнить экстренную перезагрузку, вы можете использовать аппаратные комбинации клавиш, такие как SMC reset:
Ctrl + Shift + Option + Power button
.
Заключение
Хотя Mac и не предоставляют на уровне аппаратного обеспечения возможности напрямую использовать SysRq, с помощью таких инструментов, как keyfuzz, и небольшой настройкой системы Linux, можно эффективно применять магические команды, обеспечивая безопасность и надежность работы даже на аппаратуре Apple. Эти приемы особенно полезны для пользователей, стремящихся объединить функциональность и надежность Linux с эстетикой и дизайном Mac.