руководство по переопределению клавиш в MX Linux
Полное руководство по переопределению клавиш Caps Lock и Ctrl в MX Linux: от установки утилит до автоматизации
Введение
Переопределение клавиш Caps Lock и левого Ctrl — популярная настройка среди пользователей, стремящихся повысить эргономику работы с клавиатурой. В MX Linux этот процесс требует понимания работы инструментов X Window System. В этом руководстве мы подробно разберем весь процесс от установки необходимых утилит до настройки автозагрузки, используя реальные примеры из диалога с пользователем.
Часть 1: Установка необходимых инструментов
Что такое xmodmap и зачем он нужен?
xmodmap — утилита для модификации таблицы клавиш (keymap) в X Window System. Она позволяет переназначать клавиши, изменять модификаторы и настраивать поведение клавиатуры под конкретные нужды пользователя.
Установка xmodmap в MX Linux
MX Linux основан на Debian, поэтому использует пакетный менеджер apt. Вот полная процедура установки:
Шаг 1: Обновление списка пакетов
Перед установкой новых пакетов рекомендуется обновить информацию о доступных пакетах:
☯
Terminal:
⌕
≡
✕
sudo apt update
Эта команда синхронизирует информацию о пакетах с репозиториями, что гарантирует установку актуальных версий.
Шаг 2: Установка x11-xserver-utils
Пакет x11-xserver-utils содержит несколько утилит для работы с X Server, включая xmodmap:
☯
Terminal:
⌕
≡
✕
sudo apt install x11-xserver-utils
Во время установки вы увидите примерно следующее:
☯
Terminal:
⌕
≡
✕
Чтение списков пакетов… Готово Построение дерева зависимостей… Готово Чтение информации о состоянии… Готово Следующие НОВЫЕ пакеты будут установлены: x11-xserver-utils Обновлено 0 пакетов, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено. Необходимо скачать 196 kB архивов. После данной операции объём занятого дискового пространства возрастёт на 652 kB. Хотите продолжить? [Д/н] Д
Шаг 3: Проверка установки
Убедитесь, что xmodmap установлен корректно:
☯
Terminal:
⌕
≡
✕
xmodmap --version
Вы должны увидеть информацию о версии:
☯
Terminal:
⌕
≡
✕
xmodmap 1.0.10
Также проверьте наличие связанных утилит:
☯
Terminal:
⌕
≡
✕
which xmodmap
Вывод должен быть примерно таким:
☯
Terminal:
⌕
≡
✕
/usr/bin/xmodmap
Дополнительные полезные утилиты
Для более полной настройки клавиатуры рекомендуется также установить:
☯
Terminal:
⌕
≡
✕
sudo apt install x11-utils xinput
Эти пакеты содержат:
- xev — для просмотра событий клавиатуры и мыши
- xinput — для продвинутой настройки устройств ввода
- setxkbmap — альтернативный способ настройки раскладки
Часть 2: Определение текущей конфигурации клавиатуры
Использование xev для определения keycode
Прежде чем изменять назначение клавиш, необходимо определить их текущие keycode:
Шаг 1: Запуск xev
☯
Terminal:
⌕
≡
✕
xev
Эта команда откроет окно "Event Tester", которое будет отображать все события X Window System.
Шаг 2: Определение keycode для Caps Lock
- Убедитесь, что курсор находится в окне xev
- Нажмите клавишу Caps Lock
- В терминале появится подробный вывод, например:
☯
Terminal:
⌕
≡
✕
KeyPress event, serial 36, synthetic NO, window 0x4a00001,
root 0x3c6, subw 0x0, time 2458543, (211,65), root:(1112,489),
state 0x10, keycode 66 (keysym 0xffe5, Caps_Lock), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 36, synthetic NO, window 0x4a00001,
root 0x3c6, subw 0x0, time 2458639, (211,65), root:(1112,489),
state 0x10, keycode 66 (keysym 0xffe5, Caps_Lock), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: FalseВажно: keycode для Caps Lock — 66 (в этом примере).
Шаг 3: Определение keycode для левого Ctrl
- Снова в окне xev
- Нажмите левую клавишу Ctrl
- Получите информацию, например:
☯
Terminal:
⌕
≡
✕
KeyPress event, serial 36, synthetic NO, window 0x4a00001,
root 0x3c6, subw 0x0, time 2461234, (211,65), root:(1112,489),
state 0x10, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: FalseВажно: keycode для левого Ctrl — 37 (в этом примере).
Просмотр текущей конфигурации xmodmap
Перед внесением изменений полезно сохранить текущую конфигурацию:
☯
Terminal:
⌕
≡
✕
xmodmap -pke > ~/xmodmap_backup.txt
Эта команда создаст резервную копию текущих назначений клавиш.
Просмотреть текущие настройки можно командой:
☯
Terminal:
⌕
≡
✕
xmodmap -pm
Вывод покажет текущие модификаторы:
☯
Terminal:
⌕
≡
✕
xmodmap: up to 4 keys per modifier, (keycodes in parentheses): shift Shift_L (0x32), Shift_R (0x3e) lock Caps_Lock (0x42) control Control_L (0x25), Control_R (0x69) mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd) mod2 Num_Lock (0x4d) mod3 mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf) mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
Часть 3: Создание и применение конфигурации .Xmodmap
Понимание синтаксиса xmodmap
Xmodmap использует простой текстовый формат с командами:
- keycode [номер] = [keysym] — назначает keysym на keycode
- clear [модификатор] — очищает модификатор
- add [модификатор] = [keysym] — добавляет keysym к модификатору
- remove [модификатор] = [keysym] — удаляет keysym из модификатора
Создание файла .Xmodmap
Шаг 1: Создание файла
☯
Terminal:
⌕
≡
✕
touch ~/.Xmodmap
Шаг 2: Редактирование файла
Используйте любой текстовый редактор. Для nano:
☯
Terminal:
⌕
≡
✕
nano ~/.Xmodmap
Шаг 3: Добавление правильных настроек
Основываясь на keycode из примеров выше (66 для Caps Lock, 37 для Ctrl), добавьте:
☯
Terminal:
⌕
≡
✕
! Файл конфигурации для замены Caps Lock и левого Ctrl ! Создано для MX Linux ! Сначала очищаем модификаторы clear Lock clear Control ! Меняем местами клавиши keycode 66 = Control_L keycode 37 = Caps_Lock ! Восстанавливаем модификаторы add Lock = Caps_Lock add Control = Control_L ! Комментарий: символ '!' обозначает начало комментария ! Комментарии должны быть на отдельных строках
Важное примечание: В отличие от примера пользователя, где комментарии были в той же строке, что и команды, правильный синтаксис требует, чтобы комментарии начинались с '!' и были на отдельных строках.
Шаг 4: Сохранение файла
В nano: Ctrl+O, Enter, Ctrl+X
Применение конфигурации
Способ 1: Прямое применение
☯
Terminal:
⌕
≡
✕
xmodmap ~/.Xmodmap
Если все сделано правильно, вы не увидите ошибок.
Способ 2: Проверка перед применением
Для проверки синтаксиса без применения:
☯
Terminal:
⌕
≡
✕
xmodmap -pke ~/.Xmodmap
Способ 3: Применение с проверкой ошибок
☯
Terminal:
⌕
≡
✕
xmodmap -verbose ~/.Xmodmap 2>&1 | grep -v "^!"
Эта команда покажет только важные сообщения.
Проверка результатов
После применения настройки проверьте:
- Проверка модификаторов:
☯
Terminal:
⌕
≡
✕
xmodmap -pm | grep -E "(lock|control)"
- Проверка назначений клавиш:
☯
Terminal:
⌕
≡
✕
xmodmap -pke | grep -E "(66|37)"
- Практическая проверка: - Нажмите бывший Caps Lock (теперь Ctrl) + C в терминале — должно копироваться - Нажмите бывший левый Ctrl (теперь Caps Lock) — должен включаться/выключаться индикатор Caps Lock
Часть 4: Автоматизация и настройка автозагрузки
Понимание проблемы
Настройки xmodmap сбрасываются при:
- Перезагрузке системы
- Изменении раскладки клавиатуры
- Подключении/отключении клавиатуры
- Запуске некоторых приложений
Методы настройки автозагрузки
Метод 1: Файл .xinitrc (для X11 сессий)
☯
Terminal:
⌕
≡
✕
echo 'if [ -f ~/.Xmodmap ]; then' >> ~/.xinitrc echo ' xmodmap ~/.Xmodmap' >> ~/.xinitrc echo 'fi' >> ~/.xinitrc
Метод 2: Файл .xsessionrc (рекомендуется для MX Linux)
☯
Terminal:
⌕
≡
✕
nano ~/.xsessionrc
Добавьте:
☯
Terminal:
⌕
≡
✕
#!/bin/sh
# Загрузка пользовательских настроек xmodmap
if [ -f "$HOME/.Xmodmap" ]; then
/usr/bin/xmodmap "$HOME/.Xmodmap"
fiСделайте файл исполняемым:
☯
Terminal:
⌕
≡
✕
chmod +x ~/.xsessionrc
Метод 3: Использование systemd (современный способ)
Создайте службу systemd:
☯
Terminal:
⌕
≡
✕
mkdir -p ~/.config/systemd/user nano ~/.config/systemd/user/xmodmap.service
Добавьте содержимое:
☯
Terminal:
⌕
≡
✕
[Unit] Description=Load Xmodmap configuration After=graphical-session.target [Service] Type=oneshot ExecStart=/usr/bin/xmodmap %h/.Xmodmap RemainAfterExit=yes [Install] WantedBy=graphical-session.target
Активируйте службу:
☯
Terminal:
⌕
≡
✕
systemctl --user enable xmodmap.service systemctl --user start xmodmap.service
Метод 4: Через оконный менеджер MX Linux
Для MX Linux с Xfce:
- Откройте "Меню" → "Настройки" → "Менеджер настроек"
- Перейдите в "Сессия и запуск"
- Выберите вкладку "Автозапуск приложений"
- Нажмите "Добавить"
- Заполните: - Имя:
Загрузка xmodmap- Описание:Загружает пользовательские настройки клавиатуры- Команда:xmodmap /home/ВАШ_ПОЛЬЗОВАТЕЛЬ/.Xmodmap- Задержка:2 секунды(рекомендуется)
Метод 5: Создание скрипта-обертки
Создайте более надежный скрипт:
☯
Terminal:
⌕
≡
✕
nano ~/.config/autostart/xmodmap_wrapper.sh
Добавьте:
☯
Terminal:
⌕
≡
✕
#!/bin/bash
# Ожидание полной загрузки X сервера
sleep 2
# Повторные попытки применения xmodmap
MAX_RETRIES=5
RETRY_DELAY=1
for i in $(seq 1 $MAX_RETRIES); do
if [ -f "$HOME/.Xmodmap" ]; then
if xmodmap "$HOME/.Xmodmap" 2>/dev/null; then
echo "$(date): Xmodmap успешно загружен" >> ~/.xmodmap.log
exit 0
else
echo "$(date): Попытка $i не удалась" >> ~/.xmodmap.log
sleep $RETRY_DELAY
fi
fi
done
echo "$(date): Не удалось загрузить Xmodmap после $MAX_RETRIES попыток" >> ~/.xmodmap.logСделайте исполняемым:
☯
Terminal:
⌕
≡
✕
chmod +x ~/.config/autostart/xmodmap_wrapper.sh
Добавьте скрипт в автозагрузку через меню настроек.
Часть 5: Расширенные настройки и альтернативы
Использование setxkbmap как альтернативы
Для простой замены Caps Lock и Ctrl можно использовать:
☯
Terminal:
⌕
≡
✕
setxkbmap -option ctrl:swapcaps
Эта команда мгновенно меняет клавиши местами.
Для постоянного применения создайте скрипт:
☯
Terminal:
⌕
≡
✕
nano ~/.config/autostart/setxkbmap_fix.sh
Добавьте:
☯
Terminal:
⌕
≡
✕
#!/bin/bash sleep 1 setxkbmap -option ctrl:swapcaps
Создание переключателя между конфигурациями
Создайте скрипт для переключения между разными раскладками:
☯
Terminal:
⌕
≡
✕
nano ~/bin/switch_keyboard_layout
Добавьте:
☯
Terminal:
⌕
≡
✕
#!/bin/bash
CONFIG_DIR="$HOME/.keyboard_layouts"
CURRENT_LAYOUT_FILE="$HOME/.current_keyboard_layout"
# Создаем директорию для конфигураций
mkdir -p "$CONFIG_DIR"
if [ ! -f "$CURRENT_LAYOUT_FILE" ]; then
echo "default" > "$CURRENT_LAYOUT_FILE"
fi
CURRENT_LAYOUT=$(cat "$CURRENT_LAYOUT_FILE")
case "$CURRENT_LAYOUT" in
"default")
# Сохраняем стандартную раскладку
xmodmap -pke > "$CONFIG_DIR/default.xmodmap"
# Применяем пользовательскую
if [ -f "$CONFIG_DIR/custom.xmodmap" ]; then
xmodmap "$CONFIG_DIR/custom.xmodmap"
else
# Создаем кастомную раскладку
cat > "$CONFIG_DIR/custom.xmodmap" << EOF
clear Lock
clear Control
keycode 66 = Control_L
keycode 37 = Caps_Lock
add Lock = Caps_Lock
add Control = Control_L
EOF
xmodmap "$CONFIG_DIR/custom.xmodmap"
fi
echo "custom" > "$CURRENT_LAYOUT_FILE"
notify-send "Раскладка клавиатуры" "Включена пользовательская раскладка (Caps Lock ↔ Ctrl)"
;;
"custom")
# Возвращаем стандартную раскладку
if [ -f "$CONFIG_DIR/default.xmodmap" ]; then
xmodmap "$CONFIG_DIR/default.xmodmap"
else
setxkbmap
fi
echo "default" > "$CURRENT_LAYOUT_FILE"
notify-send "Раскладка клавиатуры" "Включена стандартная раскладка"
;;
esacСделайте исполняемым:
☯
Terminal:
⌕
≡
✕
chmod +x ~/bin/switch_keyboard_layout
Теперь вы можете быстро переключаться командой:
☯
Terminal:
⌕
≡
✕
~/bin/switch_keyboard_layout
Решение общих проблем
Проблема: Настройки сбрасываются после сна/пробуждения
Решение — создать службу, отслеживающую пробуждение:
☯
Terminal:
⌕
≡
✕
nano ~/.config/systemd/user/resume-fix.service
☯
Terminal:
⌕
≡
✕
[Unit] Description=Fix keyboard layout after resume After=suspend.target [Service] Type=oneshot ExecStart=/usr/bin/bash -c 'sleep 2 && xmodmap %h/.Xmodmap' User=%I [Install] WantedBy=suspend.target
Проблема: Конфликт с другими программами
Проверьте, какие программы могут переопределять клавиатуру:
☯
Terminal:
⌕
≡
✕
ps aux | grep -E "(keyboard|kbd|xkb|setxkbmap)"
Временно отключите подозрительные программы и проверьте работу xmodmap.
Часть 6: Полный автоматический скрипт установки
Для удобства создайте полный скрипт установки:
☯
Terminal:
⌕
≡
✕
nano ~/setup_keyboard_remap.sh
Добавьте содержимое:
☯
Terminal:
⌕
≡
✕
#!/bin/bash
# Скрипт автоматической настройки замены Caps Lock и Ctrl
# для MX Linux
set -e
echo "=== Установка и настройка замены Caps Lock ↔ Ctrl ==="
echo
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Функция для вывода с цветом
print_status() {
echo -e "${GREEN}[✓]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[!]${NC} $1"
}
print_error() {
echo -e "${RED}[✗]${NC} $1"
}
# 1. Проверка прав
if [ "$EUID" -eq 0 ]; then
print_error "Не запускайте скрипт с правами root!"
exit 1
fi
# 2. Установка xmodmap
print_status "Проверка установки xmodmap..."
if ! command -v xmodmap &> /dev/null; then
print_warning "xmodmap не установлен. Устанавливаю..."
sudo apt update
sudo apt install -y x11-xserver-utils x11-utils
print_status "xmodmap установлен"
else
print_status "xmodmap уже установлен"
fi
# 3. Определение keycode
print_status "Определение keycode клавиш..."
print_warning "Откроется окно xev. Нажмите Caps Lock, затем левый Ctrl"
# Временный скрипт для определения keycode
cat > /tmp/detect_keys.sh << 'EOF'
#!/bin/bash
echo "Нажмите Caps Lock в окне xev (закройте окно после нажатия)..."
xev | grep -A2 -B2 "Caps_Lock" | grep keycode | head -1
echo "Нажмите левый Ctrl в окне xev (закройте окно после нажатия)..."
xev | grep -A2 -B2 "Control_L" | grep keycode | head -1
EOF
chmod +x /tmp/detect_keys.sh
# Альтернативный способ - использовать предустановленные значения
print_warning "Использую стандартные keycode: Caps Lock=66, Left Ctrl=37"
CAPS_KEYCODE=66
CTRL_KEYCODE=37
# 4. Создание файла .Xmodmap
print_status "Создание файла .Xmodmap..."
cat > ~/.Xmodmap << EOF
! Конфигурация для замены Caps Lock и левого Ctrl
! Создано автоматически $(date)
clear Lock
clear Control
keycode $CAPS_KEYCODE = Control_L
keycode $CTRL_KEYCODE = Caps_Lock
add Lock = Caps_Lock
add Control = Control_L
! Дополнительные настройки (раскомментируйте при необходимости)
! keycode 135 = Menu ! Меню на клавише Menu
! keycode 108 = Alt_R ! Правый Alt
EOF
print_status "Файл .Xmodmap создан"
# 5. Применение настроек
print_status "Применение настроек..."
if xmodmap ~/.Xmodmap; then
print_status "Настройки успешно применены"
else
print_error "Ошибка применения настроек"
exit 1
fi
# 6. Настройка автозагрузки
print_status "Настройка автозагрузки..."
# Создание .xsessionrc
if [ ! -f ~/.xsessionrc ]; then
cat > ~/.xsessionrc << 'EOF'
#!/bin/sh
# Загрузка пользовательских настроек клавиатуры
sleep 1
if [ -f "$HOME/.Xmodmap" ]; then
/usr/bin/xmodmap "$HOME/.Xmodmap" 2>/dev/null
fi
EOF
chmod +x ~/.xsessionrc
print_status "Файл .xsessionrc создан"
else
if ! grep -q "xmodmap" ~/.xsessionrc; then
echo 'if [ -f "$HOME/.Xmodmap" ]; then /usr/bin/xmodmap "$HOME/.Xmodmap" 2>/dev/null; fi' >> ~/.xsessionrc
print_status "Настройки добавлены в существующий .xsessionrc"
else
print_status "Автозагрузка уже настроена в .xsessionrc"
fi
fi
# 7. Создание скрипта для ручного переключения
print_status "Создание скрипта переключения..."
mkdir -p ~/bin
cat > ~/bin/switch-caps-ctrl << 'EOF'
#!/bin/bash
CURRENT_MODE=$(xmodmap -pm | grep -q "Caps_Lock.*Control" && echo "swapped" || echo "normal")
if [ "$CURRENT_MODE" = "normal" ]; then
# Меняем местами
xmodmap -e "clear Lock"
xmodmap -e "clear Control"
xmodmap -e "keycode 66 = Control_L"
xmodmap -e "keycode 37 = Caps_Lock"
xmodmap -e "add Lock = Caps_Lock"
xmodmap -e "add Control = Control_L"
notify-send "Клавиатура" "Caps Lock и Ctrl поменяны местами"
echo "Режим: Caps Lock ↔ Ctrl (поменяны)"
else
# Возвращаем стандарт
setxkbmap
notify-send "Клавиатура" "Стандартная раскладка восстановлена"
echo "Режим: стандартная раскладка"
fi
EOF
chmod +x ~/bin/switch-caps-ctrl
# 8. Проверка
print_status "Проверка текущей конфигурации..."
echo "Текущие модификаторы:"
xmodmap -pm | grep -E "(lock|control)"
echo
print_status "=== Настройка завершена! ==="
echo
echo "Что было сделано:"
echo "1. Установлен xmodmap (если не был установлен)"
echo "2. Создан файл конфигурации ~/.Xmodmap"
echo "3. Настройки применены"
echo "4. Настроена автозагрузка через ~/.xsessionrc"
echo "5. Создан скрипт для переключения: ~/bin/switch-caps-ctrl"
echo
echo "Для проверки:"
echo " • Нажмите Caps Lock (должен работать как Ctrl)"
echo " • Нажмите левый Ctrl (должен работать как Caps Lock)"
echo
echo "Для переключения между режимами выполните:"
echo " ~/bin/switch-caps-ctrl"
echo
echo "Для отладки смотрите журнал:"
echo " tail -f ~/.xmodmap.log"Сделайте скрипт исполняемым и запустите:
☯
Terminal:
⌕
≡
✕
chmod +x ~/setup_keyboard_remap.sh ./setup_keyboard_remap.sh
Заключение
Переопределение клавиш Caps Lock и Ctrl в MX Linux — многоступенчатый процесс, который включает:
- Установку необходимых утилит (x11-xserver-utils)
- Определение keycode клавиш с помощью xev
- Создание корректного файла .Xmodmap с правильным синтаксисом
- Применение настроек через xmodmap
- Настройку автозагрузки для сохранения изменений после перезагрузки
- Создание скриптов для удобства переключения и отладки
Ключевые моменты успеха:
- Использование отдельной строки для комментариев в .Xmodmap
- Правильное определение keycode для вашей конкретной клавиатуры
- Настройка нескольких методов автозагрузки для надежности
- Создание резервных копий перед внесением изменений
Представленное решение основано на реальных проблемах пользователя и включает все необходимые шаги для успешной настройки клавиатуры в MX Linux.
-
Создано 01.12.2025 19:56:18
-
Roman Sakhno

Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.