Come posso impostare Xmodmap al login?


46

Poiché il layout della tastiera non mi soddisfa, corro xmodmapal login. Lo script è denominato .profilee funziona correttamente, ma rompe l'interfaccia di Unity.

Voglio sapere dove mettere la xmodmaplinea in modo che venga eseguita sul mio login e non rompa nulla.

Ho già provato a inserirlo nei file .bash_logine .bash_profile, senza successo ( xmodmapnon imposta la mia tastiera).

Quali sono le mie opzioni?


4
Come si rompe l'interfaccia di unità?
djeikyb,

1
Vorrei aggiungere che se il tempo di esecuzione di xmodmap è troppo lungo, è necessario rimuovere manualmente tutte le voci che non sono state modificate. Mantenere solo le modifiche nel file di input renderà xmodmap molto più veloce.
user1071575

Risposte:


29

La posizione corretta da inserire xmodmap ~/.Xmodmap(in modo che le modifiche vengano lette all'avvio) è in ~/.xinitrc(vedere la spiegazione di seguito), sebbene sia possibile posizionare alternativamente il xmodmapcomando come elemento di avvio ( /usr/bin/xmodmap /home/user/.Xmodmap). Posso dire che per il 12.04 (e presumibilmente il 12.10) che queste due alternative funzionano sicuramente, poiché entrambi i modi in cui vengono letti dopo aver effettuato l'accesso lightdm. (Ho cambiato Return to Right Shift e la modifica ha avuto effetto solo dopo aver inserito la mia password e aver effettuato l'accesso).

Nota: se si è su Xfce, nelle FAQ ufficiali di Xfce si può notare che potrebbe essere necessario creare un elemento di avvio anziché utilizzarlo ~/.xinitrce che potrebbe essere necessario ritardare l'esecuzione in modo che le xmodmapmodifiche non vengano sovrascritte setxkbmap. È possibile utilizzare un ritardo per raggiungere questo obiettivo nella voce di avvio:

/bin/bash -c "sleep 20; /usr/bin/xmodmap /home/$USER/.Xmodmap"

(Per la voce di avvio è necessario specificare percorsi assoluti)

Ogni volta che setxkbmapviene eseguito per modificare il layout della tastiera, sarà necessario eseguire xmodmap ~/.Xmodmapnuovamente nel terminale.

Creazione ~/.xinitrc

Crea un file nella cartella home chiamata .xinitrccon

touch .xinitrc

e mettici dentro:

xmodmap ~/.Xmodmap

Il Xmodmapfile non deve contenere voci nello xmodmap -e " "stile utilizzato nel terminale per l'impostazione temporanea dei valori. Deve contenere voci in questo formato:

keycode 65 = Tab
keycode 23 = Space

Spesso confonde quale dei vari Xfile (come .xprofile, .xinitrcecc.) Viene letto all'avvio, ma .xinitrcsembra essere ancora letto in 12.04, mentre .Xmodmapo .xinputrcnon viene letto da solo.


5
Nota che se apporti le modifiche con xmodmap -e '..., puoi recuperare il formato giusto per xmodmap .Xmodmapwith xmodmap -pke, che stampa la mappatura corrente, anche se vorrai filtrarla solo per le righe che si applicano alla modifica che hai apportato.
Barry Kelly,

1
Questo non ha funzionato per me. Ho creato .Xmodmap e .xinitrc | Quindi ho inserito xmodmap ~ / .Xmodmap in .xinitrc E poi all'interno .Xmodmad ho il codice chiave 166 = Codice chiave precedente 167 = Successivo
miguelmorales85

è .xinitrc non sembra più essere lanciato automaticamente in Ubuntu 17.10. Dovrai lanciarlo automaticamente con questo comando: / bin / bash -c "sleep 15 && /home/USERNAME/.xinitrc"
thebunnyrules

9

Sto usando ElementaryOS (con il suo gestore di finestre basato su GNOME) e ho trovato una soluzione usando gli xdgscript di avvio automatico. Molti gestori di finestre utilizzano xdg, quindi suppongo che questo approccio funzionerà anche in altri ambienti. Almeno dovrebbe funzionare con GNOME.

xdg esegue gli script ~/.config/autostartall'accesso in una sessione X. Per caricare xmodmap config al momento dell'accesso, aggiungere il seguente script a ~/.config/autostart/xmodmap.desktop:

[Desktop Entry]
Name[en_US]=Xmodmap
Comment[en_US]=xmodmap ~/.Xmodmap
Exec=/usr/bin/xmodmap .Xmodmap
Icon=application-default-icon
X-GNOME-Autostart-enabled=true
Type=Application

Quindi disconnettersi e accedere nuovamente e la configurazione di Xmodmap avrebbe dovuto essere caricata.

Se non funziona, prova a eseguire xmodmap nel terminale per vedere se è xmodmap che si lamenta:

$ xmodmap ~/.Xmodmap

Se non ricevi alcun errore, esegui il comando seguente per eseguire il debug:

$ sudo cat /var/log/syslog | grep -B 5 -A 5 xmodmap

Su Linux Mint 17 (basato su: Ubuntu 14.04.5) l'approccio di avvio automatico ha funzionato perfettamente per me dopo aver utilizzato un ~/.xinitrcfile non riuscito. Come sottolineato da hxpax, gli utenti di Mint (probabilmente la maggior parte / tutti i Linux derivati ​​da Debian) possono usare una finestra di dialogo della GUI per aggiungere voci di avvio automatico tramite Main Menu --> Preferences --> Startup Applications.
mattst

2
Ha funzionato ubuntu 18.04
TooTone,

2

Non ho l'interfaccia di unità di fronte a me proprio ora, ma prova a fare clic sul pulsante Applicazioni sul programma di avvio, quindi digita avvio. Dovrebbe esserci un'app chiamata Startup Applications (o alcune di queste). Fare clic e aggiungere il comando xmodmap (ad es xmodmap /home/thiago/.Xmodmap.).


L'ho provato qualche tempo fa ma non ha funzionato per me. Sono su Windows in questo momento, ma ci riproverò più tardi e riporto qui se funziona. grazie
Thiago Moraes,

2
@Thiago Moraes Questo comando di base funziona (in caso contrario, pubblica l'errore)? xmodmap .Xmodmap
djeikyb,

+1 funziona. Per essere più espliciti ho usato il percorso completo per .Xmodmap
pwned

3
questo non funziona. Sto usando il 16.04
miguelmorales85 il

@ miguelmorales85 funziona il comando di base nel tuo terminale? hai provato a usare un percorso assoluto?
djeikyb,

2

Su Mint 17/18, posso ottenere quel bu mettere i miei script nell'applicazione di avvio, con 1 secondo di ritardo.

Dato che Mint 18 è derivato da Ubuntu 1604, penso che tu possa fare lo stesso o installare prima il pannello di gestione dell'applicazione di avvio se non è presente.

Spero che sia d'aiuto.


+1 Funziona bene. Non avevo bisogno di ritardi su Linux Mint 17.
mattst

@mattst Sì, il ritardo è facoltativo.
hxpax,

Ho avuto bisogno di un ritardo di 5 secondi affinché questo funzionasse. Ho quindi utilizzato il seguente script della shell di avvio: gist.github.com/ghagerer/58212241e37229f9d6fe3a133b34be97
Gerhard Hagerer

0

Non ho avuto molta gioia con nessuno dei suggerimenti sopra (l'opzione .bashrc non era realmente praticabile in quanto esegue xmodmap su ogni nuovo terminale)

Ho toccato uno script chiamato xmodstartup.shnella mia cartella home

  #!/bin/bash           
  sleep 1;               
  echo "running xmodmap" 
  xmodmap ~/.Xmodmap     

con esso salvato, poi l'ho fatto sudo chmod +x xmodstartup.sh

poi ho semplicemente aggiunto il file eseguibile alla finestra "preferenze dell'applicazione di avvio" di gnome. bish bosh, layout inglese y Español on altgr:)


-1

Inserendo le modifiche di xmodmap ~/.bashrco /etc/bash.bashrcnon si interrompe nulla.

L'unico aspetto negativo è che si deve aprire un terminale dopo ogni avvio per attivarlo.


3
Lo sto già facendo, ma il problema è che ad ogni terminale che apro, questo comando viene eseguito. È solo un momento, ma è un po 'fastidioso e preferirei una soluzione reale. grazie comunque
Thiago Moraes il
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.