Bootstrap

руководство по переопределению клавиш в MX Linux

руководство по переопределению клавиш в 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

  1. Убедитесь, что курсор находится в окне xev
  2. Нажмите клавишу Caps Lock
  3. В терминале появится подробный вывод, например:

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

  1. Снова в окне xev
  2. Нажмите левую клавишу Ctrl
  3. Получите информацию, например:

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 использует простой текстовый формат с командами:

  1. keycode [номер] = [keysym] — назначает keysym на keycode
  2. clear [модификатор] — очищает модификатор
  3. add [модификатор] = [keysym] — добавляет keysym к модификатору
  4. 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 "^!"

Эта команда покажет только важные сообщения.

Проверка результатов

После применения настройки проверьте:

  1. Проверка модификаторов:

Terminal:

xmodmap -pm | grep -E "(lock|control)"
  1. Проверка назначений клавиш:

Terminal:

xmodmap -pke | grep -E "(66|37)"
  1. Практическая проверка: - Нажмите бывший 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:

  1. Откройте "Меню" → "Настройки" → "Менеджер настроек"
  2. Перейдите в "Сессия и запуск"
  3. Выберите вкладку "Автозапуск приложений"
  4. Нажмите "Добавить"
  5. Заполните: - Имя: Загрузка 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 — многоступенчатый процесс, который включает:

  1. Установку необходимых утилит (x11-xserver-utils)
  2. Определение keycode клавиш с помощью xev
  3. Создание корректного файла .Xmodmap с правильным синтаксисом
  4. Применение настроек через xmodmap
  5. Настройку автозагрузки для сохранения изменений после перезагрузки
  6. Создание скриптов для удобства переключения и отладки

Ключевые моменты успеха:

  • Использование отдельной строки для комментариев в .Xmodmap
  • Правильное определение keycode для вашей конкретной клавиатуры
  • Настройка нескольких методов автозагрузки для надежности
  • Создание резервных копий перед внесением изменений

Представленное решение основано на реальных проблемах пользователя и включает все необходимые шаги для успешной настройки клавиатуры в MX Linux.

Копирование материалов разрешается только с указанием автора Roman Sakhno и индексируемой прямой ссылкой на сайт (http://itdid.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/sahroman.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/sahroman.

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как настроить свой компьютер

  2. Текстовая ссылка:

    Она выглядит вот так: Как настроить свой компьютер

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

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

крипто-донат, на развитие сайта itdid.ru:

В новом окне с терминалом itdid.ru, введите любую сумму: