Постоянно устанавливать параметры раскладки клавиатуры с помощью setxkbmap в gnome / unity

28

В Ubuntu 13.10 1 (и, возможно, в восходящем гноме) появилась очень досадная ошибка : нажатие сочетания клавиш на раскладке клавиатуры заставляет фокус переместиться в какое-то системное окно, а затем обратно в окно, где было нажато сочетание клавиш. Некоторые приложения имеют некоторые действия, связанные с изменением фокуса, например, твиттер (в браузере) закрывает поле ввода текста ответа при потере фокуса и т. Д. Поэтому встроенный переключатель клавиатуры в Ubuntu мне не подходит, пока не исправлено.

X имеет встроенный механизм переключения, и он намного лучше, к тому же он не включает переключение фокуса, он переключается немедленно (переключатель gnome также иногда отстает).

Как настроить параметры xkbmap, чтобы параметры сохранялись после перезагрузки и не были сброшены Gnome?

Что я пробовал:

Во-первых, просто выполните setxkbmap:

setxkbmap -layout "us,ru"
setxkbmap -option "grp:caps_toggle,grp_led:scroll,compose:ralt"

Но это работает только:

  1. Для текущей сессии
  2. Пока Gnome не перезапишет его (например, прикосновение к чему-либо в сбросе org.gnome.desktop.input-sourcesтриггеров gconf ).

Во-вторых, добавив параметры xkb в конфигурацию Xorg:

Другой вариант - добавить следующее в конфигурацию xorg:

Section "InputClass"
        Identifier "system-keyboard"
        MatchIsKeyboard "on"
        Option "XkbLayout" "us,ru"
        Option "XkbModel" "pc105"
        Option "XkbVariant" "pc105"
        Option "XkbOptions" "grp:rctrl_toggle,grp_led:scroll"
EndSection

Xorg понимает, что во время запуска:

[    33.791] (**) Option "xkb_rules" "evdev"
[    33.791] (**) Option "xkb_model" "pc105"
[    33.791] (**) Option "xkb_layout" "us,ru"
[    33.791] (**) Option "xkb_variant" "pc105"
[    33.791] (**) Option "xkb_options" "grp:rctrl_toggle,grp_led:scroll"

Но конфигурация переключения все еще сбрасывается позже, вероятно, по Gnome.

В-третьих, gconf

введите описание изображения здесь

Я xkb-optionsи sourcesустановил org.gnome.desktop.input-sources, но Gnome по-прежнему устанавливает xkb для одного английского макета:

$ setxkbmap -print -verbose 10
Setting verbose level to 10
locale is C
Trying to load rules file ./rules/evdev...
Trying to load rules file /usr/share/X11/xkb/rules/evdev...
Success.
Applied rules from evdev:
rules:      evdev
model:      pc105
layout:     us
options:    grp_led:scroll
Trying to build keymap using the following components:
keycodes:   evdev+aliases(qwerty)
types:      complete
compat:     complete+ledscroll(group_lock)
symbols:    pc+us+inet(evdev)
geometry:   pc(pc105)
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete+ledscroll(group_lock)"    };
    xkb_symbols   { include "pc+us+inet(evdev)" };
    xkb_geometry  { include "pc(pc105)" };
};

В-четвертых, еще один вариант в gconf

введите описание изображения здесь

Настройка org.gnome.settings-daemon.peripherals.keyboardтакже не работает для меня. Ничего не меняется

Upd 1 : есть обсуждение, рекомендующее удалить /usr/lib/gnome-settings-daemon-3.0/libkeyboard.so. По крайней мере, это исправляет некоторые сбросы xkbmap (то есть после блокировки экрана).

1 Я использую 14.04, но проблема с потерей фокуса все еще не устранена. ( Неподтвержденный отчет в Гноме вверх по течению )

Kolen
источник
Вы пытались правильно настроить макет в gnome и затем добавить две setxkbmapкоманды в свой ~/.profile? Таким образом, они будут запускаться каждый раз, когда вы входите в систему, и поскольку в Gnome есть те же настройки, он не должен ничего менять, если он сбрасывается.
Тердон
1
@terdon сбрасывается даже после блокировки экрана. И он сбрасывается в состояние «только для нас, без переключателя», а не в настройки, определенные в org.gnome.desktop.input-sources.
Колен
Странный. Вы уверены, что используете Gnome, а не Unity? Вы пытались изменить настройки через обычный графический интерфейс вместо dconf-editor?
тердон
@terdon Да, это единство, но он использует потерянные вещи gnome, такие как gnome-settings-daemon, который, возможно, сбрасывает раскладку клавиатуры.
Колен
Итак, вы пытались установить правильные настройки из графического интерфейса Unity?
Тердон

Ответы:

19

Чтобы предотвратить сброс настроек клавиатуры в X, я использую эту команду:

gsettings set org.gnome.settings-daemon.plugins.keyboard active false

Это работает для меня.

Iasha102
источник
4
Я попробовал это на Ubuntu 14.04, и он ничего не делает. Есть ли у вас объяснение: как это должно работать?
Николай Лещов
2
У меня работает в 14.04
ndemou
2
У меня работает в 16.04, попробовав все остальное.
Леонардо Кастро
1
Единственный способ, который я нашел, работал в 17.04.
Cnly
1
Имейте в виду, что Ubuntu на самом деле также создал демона настройки единства в течение некоторого периода времени, но теперь, когда они снова возвращаются в Gnome, это может продолжать работать.
dragon788
6

Я сходил с ума по этому поводу, как и вы, но с Ubuntu 14.04 (LTS), Xubuntu, xfce 4.12 и xkbd (из положительных героев xfce). Ctrl + Пробел для изменения раскладки клавиатуры работал, а Alt + Shift - нет (клавиши только для модификаторов)

Наконец-то удалось заставить вещи работать

1. Run ibus-setup (Keyboard Input Methods application).
2. Goto Advanced tab.
3. Check 'Use system keyboard layout'.
4. Click 'Close'

5. Run xfce4-keyboard-settings (Keyboard application).
6. Goto Layout tab.
7. Uncheck 'Use system defaults'
8. Select 'Keyboard model' (typically 'Generic 105-key (Intl) PC' will do)
9. Set 'Change layout option' to your required switching keys combination (typically Alt+Shift will do).
10. Add languages to 'Keyboard layout'.
11. Click 'Close'.
12. Restart the computer

Вы сделали! Используйте Alt + Shift, чтобы изменить раскладку клавиатуры.

Орон Порт
источник
1
Почему вы рекомендуете использовать xfce4-keyboard-settingsв вопросе просьбу о помощи с gnome / unity, в частности?
Николай Лещов
2

Я только что прочитал эту статью о блокировке экрана, которая может быть связана. Согласно статье, блокировка экрана имеет намеренное следствие блокировки устройств ввода и манипулирования локалями. Похоже, у вас есть несколько вариантов:

  1. Прекратите блокировку экрана, возможно, это относится и к экрану приветствия, который выполняет аналогичную функцию.
  2. Используйте различные инструменты управления питанием
  3. Прекратите использовать ibus для им-переключения (возможно, FCITX?)
  4. Создайте ловушку для событий разблокировки экрана, как описано здесь .

Существует интересное обсуждение этого и связанных событий, которое можно найти в списке рассылки ubuntu-dev: https://lists.ubuntu.com/archives/ubuntu-devel/2013-November/037768.html

ястреб
источник
1

Обходной путь пользователя wof в системе отслеживания ошибок Ubuntu, для Ubuntu 14.10 с использованием gxkb :

https://bugs.launchpad.net/gnome-settings-daemon/+bug/1244090/comments/39

этот обходной путь работал для Ubuntu 14.10:

  • в Настройки-> Ввод текста удали все источники ввода, оставь только английский
  • установить gxkb (переключатель компоновки): sudo apt-get установить gxkb
  • добавить gxkb для запуска приложений через gnome-tweak-tool
  • установить горячие клавиши gxkb в ~ / .config / gxkb (по умолчанию alt_shift, но в 14.10 он не работает. ctrl_shift работает нормально)

PS новая версия gxkb имеет appindicator для Ubuntu. можно установить через ppa: zen-root / gxkb-stable

Kolen
источник
(Еще не пробовал)
Колен
E: Невозможно найти пакет gxkb
e18r
0

Во-первых, просто выполните setxkbmap:

setxkbmap -layout "us, ru" setxkbmap -option "grp: caps_toggle, grp_led: scroll, compose: ralt"

Но это работает только:

For current session
Until Gnome will overwrite it (for example touching something in gconf's org.gnome.desktop.input-sources triggers reset).

Ну, насколько Гном "сбросить" это я не знаю. Я знаю, как можно избежать каждой перезагрузки, хотя мне приходилось делать то же самое для моей мыши Logitech. Он имеет несколько кнопок, которые я хотел переназначить определенным образом, и я должен был установить этот набор при перезапуске.

Итак, что вы делаете для этого, это создать текстовый файл. Затем в этом текстовом типе файла:

#!/bin/bash

и прямо под этим положите в ваших командах. В качестве примера моя мышь выглядит так:

#!/bin/bash
xinput set-button-map "Logitech USB-PS/2 Optical Mouse" 1 2 3 4 5 8 9 6 7 10 11 12 13 14 15 16

затем вы сохраните это имя под любым именем и переместите его в другое место, например, в свой домашний каталог. он должен оставаться там "навсегда".

затем просто откройте свои приложения автозагрузки и добавьте файл в свой стартап, и тогда вам не нужно беспокоиться об этом, только в течение сеанса. все будет в порядке, чтобы перезагрузить компьютер, потому что ваши настройки будут возвращены через файл, который вы только что добавили.

Дэвид
источник