Script per attivare setxkbmap


8

Vorrei uno script bash che commuta tra: setxkbmap see setxkbmap us.

Quindi le mie intenzioni sono di mappare quello script CtrlEsctramite Tastiera> scorciatoie personalizzate.

Il punto è che voglio cambiare il layout della tastiera con CtrlEscape. Come posso implementarlo?


1
Quale DE usi?
Daisy,

3
XKB può impostare un tasto per passare da un layout all'altro. Questo non è qualcosa che vorresti scrivere, ma probabilmente c'è una configurazione preconfezionata là fuori da qualche parte dove dovresti solo selezionare quale coppia di layout e quale combinazione di tasti preferisci.
Gilles 'SO- smetti di essere malvagio'

Risposte:


3

Non so quale ambiente desktop stai eseguendo, come assegnerai un tasto di scelta rapida può variare, ma questo script funziona a livello globale, almeno sul mio Ubuntu 12.04 boxe Arch Linux:

#!/bin/bash

(setxkbmap -query | grep -q "layout:\s\+us") && setxkbmap se || setxkbmap us

Sfortunatamente, questo non funziona se si modifica il layout utilizzando un metodo gui. Almeno, non è sulla mia scatola xfce. Funziona solo se usi setxkbmap per cambiare layout. L'unico modo in cui ho scoperto che funziona sempre e costantemente è l'analisi xmodmapcome nella mia risposta di seguito.
terdon

@terdon funziona almeno sulla mia casella Ubuntu 12.04, l'hai provato sul tuo sistema?
margherita

Sì, credimi, ho passato molto tempo ad affrontare questo tipo di problema. Passo regolarmente tra 3 layout di tastiera (us, fr, es) e tra due tastiere fisiche, una con layout USA e una con spagnolo. Se uso l'applet sul mio pannello tint2 per cambiare il layout della tastiera, non c'è alcuna differenza nell'output di setxkbmap. Lo stesso vale se cambio layout usando un collegamento impostato tramite la keyboard shortcutsGUI sul mio LMDE. setxkbmapcambia solo quando lo cambio usando.
Terdon

Davvero pulito con una soluzione a una linea. Grazie.
Fredrik,

Quello che ho finito per fare è stato salvare la linea in un file .sh nella mia home directory. Quindi mappato ./toggleLayout.sh su ctrl-esc
Fredrik

4

Esistono varie risposte a domande simili . Tuttavia, nessuno di loro funziona in modo robusto per me.

Il seguente script dovrebbe funzionare in tutti i casi. Funziona sicuramente sul mio sistema debian quando cambio layout con setxkbmap:

#!/bin/bash
seven=`xmodmap -pke | grep "keycode  16" | awk '{print \$5}'` 
## If this is the "us" layout
if [ $seven == "ampersand" ]; then
    setxkbmap se
else
  setxkbmap us
fi

Lo script analizza l'output di xmodmap per vedere se il layout corrente è "us" o "se". Nel layout "us", SHIFT+ 7è mappato su "e commerciale". Se alternerai tra il layout "us" e "se", avere "e commerciale" 7significa che stai utilizzando il layout "us" e lo script cambierà in "se". Se non è attiva la "e commerciale" 7, lo script passa a "noi".


4

il modo migliore sarebbe di non usare uno script, ma di caricare una tastiera a due livelli (ad es . :) setxmodmap "us,se"e ridefinire il Ctrl- Escper inviare ISO_Next_Group

Guarda questa risposta su xkb per come ridefinire alcune chiavi senza la necessità di modificare i file predefiniti principali (quindi, non è necessario essere root). Nel file dei simboli locali (ad esempio:) ~/.xkb/symbols/mysymbolsinserisci una piccola sezione come:

partial modifier_keys 
xkb_symbols "ctrl_esc_toggle" {
    key <ESC> {
        type[Group1]="PC_CONTROL_LEVEL2",
        symbols[Group1]= [ Escape,     ISO_Next_Group ]
    };
};

PC_CONTROL_LEVEL2 indica che il simbolo sencond per quel tasto è ottenuto con Control (anziché Shift).

e nel file keymap locale (es :; ~/.xkb/keymap/mykbdpuoi crearlo con setxkbmap "us,se" ; setxkbmap -print > ~/.xkb/keymap/mykbd) cambia la riga xkb_symbols per aggiungere "mysymbols (ctr_esc_toggle)" così avrai qualcosa come:

xkb_symbols   { include "pc+us+se:2+inet(evdev)+terminate(ctrl_alt_bksp)+compose(rwin)+mysymbols(ctr_esc_toggle)"   };

(notare "se: 2", ": 2" indica di caricare le definizioni dei simboli "se" come Gruppo2; è possibile impilare vari gruppi).

ora puoi caricarlo con: xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY quindi Ctrl-Esc passerà tra i layout "us" e "se".

NOTA tuttavia che è necessario premere Ctrl (e tenere premuto) prima di Esc; nell'altro modo non funziona (richiederebbe la definizione di un modificatore virtuale per Escape e non so come farlo)


1
Come sarebbe leftwin+leftalt+space?
Hotschke,

@Hotschke, grazie{ include "pc+us+ru:2+inet(evdev)+group(win_space_toggle)" };
contributorpw
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.