Постійна xmodmap в Ubuntu 13.04


72

Я не можу змусити xmodmap запускатися під час входу в Ubuntu 13.04. Я шукав навколо, в тому числі в askubuntu, і всі відповіді, які я знайшов, не працюють.

У мене в домашній папці є файл з назвою .Xmodmap, який містить потрібні відображення. Якщо я запускаю його вручну, він працює нормально, тому помилок там немає. Для того, щоб змусити його працювати при запуску, я спробував:

  1. Використання різних, .xinitrcщо містять одну з наступних команд:

    • xmodmap .Xmodmap
    • xmodmap ~/.Xmodmap
    • /usr/bin/xmodmap /home/NAME/.Xmodmap
    • if [ -s ~/.Xmodmap ]; then
      xmodmap ~/.Xmodmap
      fi
  2. Використання .Xresourcesзамість .xinitrcтих же варіацій.

  3. Встановлення його як програми для запуску.

Жоден із перерахованих вище не працює в Ubuntu 13.04 (64-розрядний). Я також побачив декілька ідей щодо глобальної зміни відображень клавіатури, але більшість з них не застосовуються в Ubuntu 13.04 (тобто відповідні файли не існували там, де зазначено), і я вважаю за краще не торкатися глобальних налаштувань.

Відповіді:


81

Ubuntu більше не використовує xmodmap, а натомість використовує xkb(наскільки я розумію, це полегшує розкладку клавіатури за вікном, між іншим).

Файли карток у загальній системі знаходяться у

/usr/share/X11/xkb/symbols/

Здається, карти завантажуються ієрархічно, з pcкартою як коренем, і будь-якою мовою (наприклад en) як дочірнім коренем.

У моєму конкретному випадку я фізично поміняв Page Up на домашню сторінку та Page Down на End на своїй клавіатурі, тому я дуже грубо вніс зміни в загальносистемну pcкарту так:

 key <HOME> {    [  Prior        ]   };
 key <PGUP> {    [  Home         ]   };
 key  <END> {    [  Next         ]   };
 key <PGDN> {    [  End          ]   };

ПРИМІТКА. Щоб змусити Xorg використовувати вашу нову карту клавіатури, можливо, доведеться видалити наявні попередньо складені карти (* .xkm) у

/var/lib/xkb/

а потім перезапустіть Xorg.

Є різні ресурси xkb, але цей пов'язаний з Ubuntu.


9
Станом на Ubuntu 14.04, це, на жаль, найпростіший спосіб змінити клавіші. Ви МОЖЕТЕ змусити xmodmap запускатися при вході в систему, додаючи його до програм запуску, але якщо ви призупиняєте, перебуваєте в сплячому режимі тощо, ви повинні вручну запустити його або створити сценарії демонстрації демона.
holocronweaver

Я можу перепризначити клавіші в залежності від модифікаторів: unmodified shift altgr* shift+altgr. Але про що left altі super key?
Farzher

7
Я не думаю, що ваше перше речення є правдивим. У вас є джерело для цього? Мені важко повірити, що "спосіб Ubuntu" перекомпонування ваших клавіш буде редагуванням карт клавіатури xkb. Окрім криптовалюти, ця проблема також полягає в тому, що ваші користувацькі карти видаляються під час xkbоновлення.
Mateus Araújo

1
При цьому, це єдиний надійний метод, який я знайшов для перестановки ключів на Ubuntu.
Mateus Araújo

1
Треба бути кращим способом. Я знаю точний код, який я хочу відобразити, але код ключа 217 навіть не вказаний у xkb. Я навіть не бачу способу додати нові ключові коди.
Джонатан

13

Для мене конфігурація xkb є надто складною, якщо ви хочете перезаписати 1 або 2 клавіші способом, недоступним у системних налаштуваннях. Крім того, рішення повинно залишатися на стороні користувача, не редагуючи '/ usr / share / X11 / xkb / символи /' і т. Д. Примушуйте завантажувати 'xmodmap ~ / .Xmodmap' за допомогою програм запуску лише тоді, коли ви призупинили, змінили користувачів або змінити розкладку клавіатури. Отже, як підказує holocronweaver, з знайденими фрагментами коду я створив сценарій python для завантаження при запуску сеансу, який перезавантажує '~ / .Xmodmap', коли потрібно.

Перевірте звіт про помилку №1243642 (коментар №6) та завантажте його тут .


1
Все ще працює з 15.10 :-) Дякую!
лаломартини

Здається, посилання на цей легендарний сценарій порушена. Чи може хтось поставити це на github?
Епіген

Чудова - і лише життєздатна відповідь! Працюючи в 16.04. Щоб його роботу в Python3 змінили: "імпортувати gobject" на "з gi.repository імпортувати GObject як gobject".
Крейг Хікс

1
@Epigene - посилання є зараз
Крейг Хікс

Хвала! Геніальна робота навколо.
dmanexe

6

У мене була ця проблема в Ubuntu 14.04, і я знайшов рішення тут . Мабуть, Ubuntu не в змозі налаштувати клавіатуру відразу після входу в систему, але це трохи пізніше. Тож якщо ви додасте команду

sleep 4 && xmodmap ~/.Xmodmap &

щоб ~/.bash_profileтоді це повинно працювати (це робить для мене).

EDIT: Це, здається, працює лише після входу в систему, а не після запуску. Мені доведеться це дослідити пізніше.


1
Якась удача налаштувала це на запуск після призупинення / сплячки?
Джонатан

Ні, на жаль, я все ще не можу змусити його працювати після завантаження. Тож кожного разу, коли я завантажуюсь, я відкриваю термінал і xmodmap ~/.Xmodmap
набираю

майте на увазі, що в ubuntu 16.04 слід використовувати .profile
Vitor Abella

5

Перетворити Caps Lockв Escдля vimвикористання

Ось мій варіант сценарію запуску ключових карт. Він перетворює Caps Lockв Escна будь-якій клавіатурі для використання з vi, vimабо gvim.

На відміну від відповіді q4w56 , ця відповідь не використовує жодного нескінченного while; doциклу. В іншому випадку одне ядро ​​мого двоядерного процесора б'є 42% кожні 5 секунд, що суттєво знижує заряд батареї ноутбука.

#!/usr/bin/env bash
sleep 4
xmodmap -e "clear Lock"
xmodmap -e "keysym Caps_Lock = Escape"

Збережіть це як сценарій. Зробіть файл виконуваним за допомогою chmod +x. Додайте ім'я та розташування сценарію до Session and Startup → Application Autostart(у Xubuntu).

Поведінка клавіатури для цього користувача залишатиметься стійкою через перезавантаження та вихід, але не призупиняється. Наполегливість за допомогою призупинення може бути досягнута , але, на жаль, лише на системному рівні, а не на рівні користувача.

Обґрунтування перезавантаження цієї клавіатури

У сучасному світі обчислень залишається дуже мало використання для Caps Lockклавіші. Взагалі слід утримуватися від ВСІХ КАПС в силу як нетикету, так і розділення презентації та змісту . Більше того, випадкове натискання Caps Lockклавіші під час редагування тексту vimне завжди відзначається одразу, але незмінно призводить до досить дратівливої vimповедінки далі. Відключення Caps Lockключа разом і перестановка його як легкодоступного Escключового результату вдвічі виграш для vimвикористання.


Заміна функції Caps Lockключа може бути реальною економією життя vimкористувачів на Apple MacBooks без Escключа .
Серж Стройбандт

3
Краще зробити перезапис capslockна ctrl. Це вирішує набагато більше проблем, і тоді у Vim ви можете використовувати capslock+ [для Escвибачення за втручання, але я почував це обов'язково запропонувати це.
користувач907860

Що саме призупинити? Це закриття кришки вашого ноутбука? Після цього ваше рішення не працює? Як користуватися vim після закриття кришки ноутбука?
Марко Авліяш

@ MarkoAvlijaš How do you use vim after you close the lid on your laptop?Відкриваючи кришку, звичайно!
Серж Стротобандт

Ха-ха, я ніколи цього не здогадуюсь. Я маю на увазі, що блокування шапок після цього вже не відображається до esc?
Марко Авліяш

3

У мене була проблема і на Ubuntu 16.04 з fcitx, і було рішення на wiki fcitx , але для цього потрібен fcitx, має 4.2.7 або пізнішої версії

  • touch ~/.Xmodmap
  • написати конфіг
  • перезавантажиться, і fcitx спробує завантажити його автоматично

Також є певне пояснення причини.


1
Хоча це теоретично може відповісти на питання, бажано було б сюди включити істотні частини відповіді та надати посилання для довідки.
Videonauth

@Videonauth Я змінив свою відповідь
Bluethon

Дуже дякую :) Я залишаю тут свій коментар, щоб люди, які переглянули рецензію, бачили, що ви щось змінили.
Videonauth

@Videonauth - це моя перша відповідь, і я погана англійська мова, тому я зробив деяку помилку. і THX для вашої поради. : P
Bluethon

Ласкаво просимо. Надання відповідей - хороший спосіб зробити свій внесок у співтовариство.
Videonauth

3

@ Відповідь Даніеля вказала мені на правильний шлях, але я хотів би продовжити це.

Для мене працює на Linux Mint 17.2 та Ubuntu 16.04.

Я спробував усі повороти, про які я міг би продовжувати використовувати xmodmap, але всі вони виходять з ладу, коли система переходить у сплячий режим. Те ж стосується і сценаріїв запуску програми, які використовуються setxkbmapу випадках, коли * налаштування-демон (для мене це xfce4) працює пізніше, ніж сценарій --- і на порядок реально не може вплинути.

Що я нарешті придумав, має такі інгредієнти:

1) Напишіть мінімальний файл зіставлення клавіатури для /usr/share/X11/xkb/symbols. Давайте може зателефонувати у файл. mylayoutЦе може бути так само просто

xkb_symbols "basic" {
  name[Group1] = "My Layout";
  include "us"
  key <AE03> { [ 3, numbersign, sterling, sterling] };
  include "level3(ralt_switch)"
}
  • basic це лише ім'я, ми зустрінемо його згодом ще раз.
  • name[Group1]Так само просто назва, здається, але він не буде грати ніякої ролі пізніше.
  • include "us"включає звичайну нам клавіатуру. Насправді usце ще один файл у тому ж каталозі. Це розкладка клавіатури, яку ми адаптуємо. Виберіть інший за потребою. Примітка: для закінчення цього рядка немає крапки з комою.
  • keyЛінія одна адаптація клавіатури, більше може слідувати. <AE03>Можна знайти в файлах під /usr/share/X11/xkb/keycodes. Використовуйте xevпрограму, щоб з'ясувати, що у клавіші "3" є код 12, а у файлі клавішних кодів Xfree86він відображається <AE03>.
  • Нарешті, ще одна includeдиректива щодо активації іншої опції клавіатури, в цьому випадку я хочу, щоб потрібна клавіша Alt була клавішею перемикання рівня 3, тобто клавіша, яка надає доступ до sterlingзнаку, визначеного нами вище. level3це лише ім'я файлу в одній папці з ralt_switchодним його розділом. Погляньте навколо і виберіть, що вам потрібно включити.

2) Я не помістив mylayoutв системну папку. Швидше я зробив лише м'яке посилання від системної папки до папки, яка мені сподобалася, щоб відразу побачити, що це не запас програмного забезпечення.

3) Далі я не виправляв evdev.xml, знову, щоб запобігти клопотам з оновленням. Але це було б необхідно для пошуку mylayout у редакторі конфігурації клавіатури (для xfce4 це xfce4-keyboard-settings). Замість цього я xfce4-settings-editorі змінив keyboard-layout->XkbLayoutдо mylayout(ім'я файлу) і XkbVariantдо basic(див . Вище) Після цього mylayout/basicвідображається і в редакторі налаштувань клавіатури. Введення, evdev.xmlздається, необхідне лише для того, щоб можна було вибрати макет.

Таким чином, налаштування клавіатури тепер переживають режим сну та перезавантажуються.

Більше інформації можна знайти тут: http://www.charvolant.org/~doug/xkb/html/node5.html .

Інший підхід до вирішення проблеми режиму сну (не пробував себе), можна знайти тут: https://www.vinc17.net/unix/xkb.en.html .

ОНОВЛЕННЯ: працював з Mint 18.3 тієї ж миті, коли я змінив налаштування в xfce4-editor-editor, як описано вище.

ОНОВЛЕННЯ: З 18.04, gdm3 як диспетчер дисплея і XFCE4 як менеджер вікон, схоже, що ~ / .Xmodmap читається ще раз, і налаштування, схоже, призупиняється. (Я рідко використовую призупинення, і я ніколи не знаю, у якому режимі перебуває ноутбук.)


2

РЕВІЗІЯ

Оновлення на початку 2018 року зламало стійкість - автоматичне перезавантаження ключової карти після призупинення або сплячки. Оскільки методи, що використовують сценарії /etc/pm/sleep.d, перестали працювати (застаріли?), Це залишило лише новіший шлях, використовуючи / lib / systemd / system-sleep та трохи інший сценарій (який почав працювати над картами!).

Таким чином, ця публікація оновлюється до новішого методу для наполегливості та включає нормальне початкове завантаження ключових карт, яке також почало працювати. Процедура перетворення файлу .Xmodmap в .xkbmap залишається незмінною.

Зверніть увагу, що це рішення для кожного користувача. Для відповіді на кожен пристрій дивіться, як застосувати карту клавіш до одного пристрою . Цей метод може бути адаптований для використання тут.

Спочатку змініть файл .Xmodmap за бажанням. Їх простіше редагувати безпосередньо, ніж файли .xkbmap. Коли він завантажується:

xmodmap .Xmodmap

потім конвертуйте у .xkb файл:

xkbcomp $ DISPLAY $ HOME / .xkbmap

Для автоматичного завантаження при запуску відкрийте програми запуску, натисніть кнопку Додати і в командному рядку введіть:

xkbcomp /home/user/.xkbmap ": 0"

("користувач" замінено фактичним іменем користувача.) Для Імені, можливо, введіть Завантажити карту клавіатури. За бажанням додайте коментар і натисніть Зберегти.

Клавіатура тепер завантажуватиметься кожного разу, коли система завантажиться, але не витримає призупинення чи сплячки. Для цього створіть новий файл у / lib / systemd / system-sleep, можливо, з назвою 60_xkbmap, який містить:

#!/bin/sh
case $1/$2 in
  pre/*)
    # Place pre-suspend commands here
    exit 0
    ;;
  post/*)
    # Place post-suspend commands here
    export DISPLAY=":0"
    export XAUTHORITY="/home/user/.Xauthority"
    su user -c "xkbcomp /home/user/.xkb/xkb-map $DISPLAY 2>/dev/null"
    ;;
esac

( Посилання ) Як зазначено вище, замініть "user" фактичним іменем користувача.

Мапа клавіш тепер має автоматично завантажуватися та залишатися стійкою. Примітка:

  • Застосовується до поточного випуску LTS, 16.04 та ймовірно пізніших.
  • Знято з поста 14 вищезв'язаної теми помилки.
  • Раніші коментарі застосовувались до оригінальної публікації.

Я намагаюся цей метод зараз і тепер, коли я запускаю термінал, я отримую купу повідомлень на кшталт цього: Попередження: для <AB11> (клавішний код 97) символи не визначені. Попередження: для <JPCM> (клавішний код 103) символи не визначені! Немає символів, визначених для <I120> (код коду 120) ...... багато інших не впевнені, які наслідки цього ще будуть. Хтось знає?
загублена дитина

Цей метод, незважаючи на вищезазначені попередження, працює, але лише тимчасово - через деякий час картографування якимось чином забудеться, і супер ключ повернеться до своєї функції за замовчуванням. Тож я спробую це навпаки - я перезавантажую основні ярлики редагування на своєму mac, щоб використовувати клавішу Control замість клавіші Command, і побачу, чи працює це. Я просто хочу, щоб мої команди cut-copy-paste-undo-redo були однаковими для Mac та Ubuntu. Мене дуже засмучує, коли меню пошуку спливає на Ubuntu кожного разу, коли я щось намагаюся скопіювати або вставити.
загубила дитину

1

Це також змусило мене спіткнутися, коли я перейшов з Ubuntu 12.04 до 13.04.

На щастя, цей параметр зараз (або, можливо, завжди був) легко доступний у налаштуваннях клавіатури, і його можна змінити за допомогою декількох клацань миші.

  1. Перейдіть у Налаштування системи > Розкладка клавіатури > Опції ...
  2. У розділі Параметри розкладки клавіатури клацніть стрілку, щоб відкрити параметри положення клавіші Ctrl .
  3. Поставте прапорець у пункті Swap Ctrl та Caps Lock .

Там ви переходите: лівий контроль та Caps Lock перейшли в положення.

Не забудьте видалити, ~/.Xmodmapколи ви внесли зміни.


Це, можливо, було неприйнятним, оскільки воно не стосується xmodmap, але саме таким чином я виявив, що використання Gnome Tweak, можливо, було причиною деяких моїх відображень.
dragon788

Я не бачу цього в 16.04, це все-таки можливо?
chrismarx

1
@chrismarx Ні, їх видалили. В даний час (16,04) я поставив XKBOPTIONS="ctrl:swapcaps"в /etc/default/keyboard.
glts

0

Я вважаю, що додавання цього сценарію до запуску задовольняє:

while true;do 
    xmodmap -e "keycode 87=Prior"
    xmodmap -e "keycode 88=Next"
    sleep 5
done

Я намагався використовувати xmodmap ./Xmodmap, але щоразу, коли воно виконується, буде помітно відставання.


4
while; doСлід уникати використання будь-якої нескінченної петлі. Це призвело до того, що одне ядро ​​мого двоядерного процесора кожні 5 секунд потрапляло на 42%, сильно знижуючи заряд батареї мого ноутбука!
Серж Стротобандт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.