Ustaw na stałe opcje układu klawiatury za pomocą setxkbmap w gnome / unity

28

Ubuntu 13.10 1 (i być może upstream gnome) wprowadził bardzo irytujący błąd : naciśnięcie skrótu przełącznika układu klawiatury powoduje, że fokus odchodzi do okna systemu, a następnie z powrotem do okna, w którym naciśnięto skrót. Niektóre aplikacje mają pewne działania związane ze zmianą fokusu, na przykład Twitter (w przeglądarce) zamyka pole wprowadzania tekstu odpowiedzi, gdy traci fokus itp. Tak więc natywny przełącznik klawiatury ubuntu nie jest dla mnie odpowiedni, dopóki nie zostanie naprawiony.

X ma wbudowany mechanizm przełączania i jest znacznie lepszy, poza tym, że nie wymaga przełączania ostrości, przełącza się natychmiast (przełącznik gnome czasami również opóźnia się).

Jak skonfigurować opcje xkbmap, aby ustawienia pozostały po ponownym uruchomieniu i nie zostaną zresetowane przez Gnome?

Co próbowałem:

Po pierwsze, po prostu uruchom setxkbmap:

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

Ale działa tylko:

  1. Dla bieżącej sesji
  2. Dopóki Gnome nie nadpisze go (na przykład dotknięcie czegoś w org.gnome.desktop.input-sourcesresecie wyzwalaczy gconf ).

Po drugie, dodanie opcji xkb do konfiguracji Xorg:

Inną opcją jest dodanie następujących elementów do konfiguracji 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 rozumie, że podczas uruchamiania:

[    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"

Ale konfiguracja przełączania wciąż resetuje się później, prawdopodobnie przez gnome.

Po trzecie, gconf

wprowadź opis zdjęcia tutaj

Mam xkb-optionsi sourcesustawiłem org.gnome.desktop.input-sources, ale Gnome wciąż ustawia xkb na pojedynczy angielski układ:

$ 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)" };
};

Po czwarte, kolejna opcja w gconf

wprowadź opis zdjęcia tutaj

Ustawienie org.gnome.settings-daemon.peripherals.keyboardteż nie działa dla mnie. Nic się nie zmienia.

Aktualizacja 1 : Dyskusja zaleca usunięcie /usr/lib/gnome-settings-daemon-3.0/libkeyboard.so. Przynajmniej to naprawia niektóre resetowania xkbmap (tj. Po zablokowaniu ekranu).

1 Używam 14.04, ale problem z utratą ostrości nie został rozwiązany. ( Niepotwierdzony raport w górę Gnome )

kolen
źródło
Czy próbowałeś poprawnie ustawić układ w gnome, a następnie dodać dwa setxkbmappolecenia do swojego ~/.profile? W ten sposób będą uruchamiane przy każdym logowaniu, a ponieważ w Gnome są takie same ustawienia, nic nie powinno się zmienić, jeśli zostanie zresetowane.
terdon
1
@terdon resetuje się nawet po zablokowaniu ekranu. I resetuje się do stanu „tylko nas, bez przełączania”, a nie do ustawień zdefiniowanych w org.gnome.desktop.input-sources.
kolen
Dziwne. Czy na pewno używasz Gnome, a nie Unity? Czy próbowałeś zmienić ustawienia za pomocą zwykłego GUI zamiast dconf-editor?
terdon
@terdon tak, to jedność, ale używa zagubionych rzeczy gnome, takich jak gnome-settings-daemon, który ewentualnie resetuje mapę klawiszy.
kolen
Więc próbowałeś ustawić prawidłowe ustawienia z GUI Unity?
terdon

Odpowiedzi:

19

Aby zapobiec resetowaniu ustawień klawiatury przez gnoma w X, używam tego polecenia:

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

To działa dla mnie.

Iasha102
źródło
4
Próbowałem tego na Ubuntu 14.04 i nic nie robi. Czy masz jakieś wyjaśnienie dotyczące: jak to ma działać?
Nickolai Leschov
2
Pracuje dla mnie w 14.04
ndemou
2
Działa dla mnie w 16.04, po wypróbowaniu wszystkiego innego.
Leonardo Castro,
1
Jedyna metoda, którą znalazłem, działała w 17.04.
Cnly,
1
Pamiętaj, że Ubuntu stworzył demona ustawień jedności również przez pewien czas, ale teraz, gdy wracają do Gnome, może to nadal działać.
dragon788
6

Szaleję za tym podobnie jak ty, ale z Ubuntu 14.04 (LTS), Xubuntu, xfce 4.12 i xkbd (od gadżetów xfce). Ctrl + Spacja, aby zmienić układ klawiatury działał, ale Alt + Shift nie działał (klawisze tylko z modyfikatorem).

W końcu udało się sprawić, by wszystko działało

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

Jesteś skończony! Użyj Alt + Shift, aby zmienić układ klawiatury.

Port Oron
źródło
1
Dlaczego xfce4-keyboard-settingskonkretnie zaleca się używanie w pytaniu pytania o gnome / jedność?
Nickolai Leschov
2

Właśnie przeczytałem ten artykuł na temat blokowania ekranu, który może być powiązany. Zgodnie z artykułem blokowanie ekranu ma zamierzoną konsekwencję blokowania urządzeń wejściowych i manipulowania ustawieniami narodowymi. Wygląda na to, że masz kilka opcji:

  1. Przestań blokować ekran, prawdopodobnie obejmuje to również ekran powitalny, który pełni podobną funkcję
  2. Używaj różnych narzędzi do zarządzania energią
  3. Przestać używać ibusa do przełączania im (być może FCITX?)
  4. Utwórz zaczep dla zdarzeń odblokowywania ekranu, jak opisano tutaj .

Interesującą dyskusję na temat tego i powiązanych wydarzeń można znaleźć na liście mailingowej Ubuntu-dev: https://lists.ubuntu.com/archives/ubuntu-devel/2013-November/037768.html

Jastrząb
źródło
1

Obejście przez użytkownika wof w narzędziu do śledzenia błędów Ubuntu, dla Ubuntu 14.10 za pomocą gxkb :

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

to obejście działało w przypadku Ubuntu 14.10:

  • w Ustawienia-> Wprowadzanie tekstu usuń wszystkie źródła wprowadzania, pozostaw tylko angielski
  • install gxkb (przełącznik układu): sudo apt-get install gxkb
  • dodaj gxkb do aplikacji startowych za pomocą gnome-tweak-tool
  • ustaw klawisze skrótu gxkb w ~ / .config / gxkb (domyślnie jest to alt_shift, ale w 14.10 nie działa. ctrl_shift działa dobrze)

ps nowa wersja gxkb ma appindicator dla ubuntu. może być zainstalowany przez ppa: zen-root / gxkb-stable

kolen
źródło
(Jeszcze nie wypróbowałem)
kolen
E: Nie można znaleźć pakietu gxkb
e18r
0

Po pierwsze, po prostu uruchom setxkbmap:

setxkbmap -layout "us, ru" setxkbmap -option "grp: caps_toggle, grp_led: przewiń, skomponuj: ralt"

Ale działa tylko:

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

O ile Gnome „resetuje” to nie wiem. Wiem jednak, jak można zatrzymać każdy restart, ponieważ musiałem zrobić dokładnie to samo dla mojej myszy Logitech. Ma wiele przycisków, które chciałem odwzorować w określony sposób i musiałem to ustawić przy ponownym uruchomieniu.

Więc to, co robisz, to utworzenie pliku tekstowego. Następnie w tym typie pliku tekstowego:

#!/bin/bash

i tuż pod tymi, które wpisujesz w swoje polecenia. Jako przykład moja mysz wygląda następująco:

#!/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

następnie zapisz to jako dowolną nazwę i przenieś do jakiegoś miejsca, takiego jak katalog domowy. musi tam pozostać „na zawsze”.

następnie po prostu otwórz aplikacje startowe i dodaj plik do startu, a następnie nie musisz się martwić, że trwa to tylko dla sesji. będzie można zrestartować komputer, ponieważ ustawienia powrócą do właśnie dodanego pliku.

David
źródło