Bazı anahtarları veya aygıtları nasıl yeniden eşlerim?


236

Ubuntu’daki bazı tuşları yeniden eşleştirmenin bir yolunu arıyorum.

yani

Ben değiştirmek istiyorum PgUpiçin Homeya PgDownhiç End.

Bir yerleşik komut veya bir araç var mı, tuşları Ubuntu / GNOME'da yeniden atayın?


Burada cevabımı kontrol et . Aynı cevabı kopyalayıp yapıştırmaya değmez. Belki sana yardım ederdi.
Rahul Virpara

1
CTRL-P / N birim basamakları için herhangi bir Emacs benzeri ciltleme var mı?
Léo Léopold Hertz 준영

Bazı zamanlar xmodmapkısıtlı olduğundan! sistem çapında bir ayar elde etmek için kullanmanız gerekir xkb. Dolayısıyla /usr/share/X11/xkb/symbols/, değişikliklerinizi buraya eklemek için dil dosyasını düzenleyin . Bkz askubuntu.com/a/898462/34298
rubo77

Yanıtlar:


249

Uyarı: 2013 itibariyle, Ubuntu ve türevleri artık kullanılmıyor xmodmap, bunun yerine kullanılıyor xkb. Daha fazla bilgi için bu cevaba bakınız . Aşağıdaki cevap artık mevcut sürümler için geçerli değil.


Bazı tuşları tekrar silmek için iki araca ihtiyacınız var. İlk xev (komut satırı aracı) ve ikinci xmodmap (ayrıca komut satırı aracı). Her ikisi de fazladan kurulmadan Ubuntu'da hazır bulunmalıdır.

  1. Terminal penceresini başlatın ve çalıştırın xev. Şimdi aktif ve bir tuşa basmanızı bekler. Ardından davranışını değiştirmek istediğiniz tuşa basın. yani PgUp.

  2. xevbasılan tuşla ilgili bazı bilgiler verir. Üçüncü satır önemlidir. Şuna benzemelidir:

    state 0x10, keycode 110 (keysym 0xff55, Prior), same_screen YES,
    

    Bu örnekte Prior, anahtarın şu anda atandığı davranışın adıdır, sayı anahtarı kodu, anahtarı tanımlayan iç kimliktir. Şimdi bunu başka bir anahtarla yapın, yani PgDownbu çıkışı

    state 0x10, keycode 115 (keysym 0xff56, Next), same_screen YES,
    

    Burada yine bizim için ilginç bir parçasıdır keycode 115ve Next- davranışının adı.

  3. Şimdi değiştirmek istediğinizde iki tuşu kullanın xmodmap.

     xmodmap -e "keycode 110 = Next"
    

    Bu işlem, klavyenizdeki 110 tuş kodlu tuşu harekete geçirir Next. Bu oldukça basit.

    Eşleştirdiğiniz Shiftanahtarın , tuşla birlikte kullanıldığında farklı bir anlamı olması gerektiğine dikkat edin (örneğin, İngiliz klavye düzenleri, Shift+ 2, tırnak işaretleri verir); Örneğin, 53 kodlu tuşun normalde ters eğik çizgiyle eşleşmesini, ancak shift ile kullanıldığında çubuk sembolüyle eşleşmesini istiyorsanız, şunları yapabilirsiniz:

     xmodmap -e "keycode 53 = backslash bar"
    

Ek bilgiler: Bu dönüşümlerin dizisidir Key, Shift+Key, mode_switch+Key, mode_switch+Shift+Key, AltGr+Key, AltGr+Shift+Key. Bir sütun atlamak için kullanın NoSymbol. Üstelik, burada tüm keysyms kapsamlı bir listesi.

Not: Bu değişiklik yalnızca etkin X oturumu içindir ve yeniden başlatıldıktan sonra kaybolacaktır. Değişiklikleri kalıcı olarak kaydetmek istediğinizde, yukarıdakilerden sonra aşağıdaki komutları çalıştırmanız gerekir:

xmodmap -pke >~/.Xmodmap

( .Xmodmapana dizininizde bir dosya oluşturur ~) ( ))

Ardından .xinitrc, ana dizininizde komutunu girdiğiniz adda bir dosya oluşturmanız gerekir xmodmap .Xmodmap.

Şimdi değişiklikleri hemen görmek için değiştirebilir .Xmodmapve xmodmap .Xmodmapkonsoldan çalıştırabilirsiniz . Değişiklikler .Xmodmapdevam edecek.

kaynak: Ubuntu Foruns

Bonus şeyler:

Yeniden yazdığınız tuş bir duruma bağlı olarak farklı davranış gösteriyorsa (sayısal klavyedeki tuşların NumLock'a nasıl bağlı olduğu gibi) sadece xmodmap -pmdeğiştiricilerin bir listesini almak için yapmanız gerekir ve ardından:

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

Örneğin, sayısal klavyede virgül yerine bir süre almak istediğinizi (çoğu programcı için yararlıdır), ancak NumLock kapalıyken "delete" davranışını tutmak istediğinizi varsayalım.

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2Çünkü xmodmap -pmsöyler mod2olduğunu Num_Lock, başka isimler de tuşlarına basarak elde edilir xev.


3
xevFnkilit
basımları

3
Seçilen cevap, Ubuntu 12.10'da benim için Caps-Lock tuşunu tekrar saklamaya çalışmadı. Bunu, tuşların listesi ve alternatif davranışlar içeren Sistem Ayarları -> Klavye -> Düzen Ayarları -> Seçenekler kısmına giderek yapabildim. Unity ve terminalde kusursuz çalıştı.
Allyl Isocyanate

1
Bağlı birden fazla klavyeniz varsa, bu araçlar başka bir klavyedeki aynı tuşla arasındaki farkı görecek mi?
stommestack

1
Garip, her şeyi yaptım, ancak yeniden başlattıktan sonra anahtar haritalarım hala sıfırlanıyor.
Costa,

1
-eventUbuntu 12.04'te bir bayrağım olduğunu sanmıyorum . Bir hata atıyor ve içinde "olay" demedi man xev.
isomorphismes,

20

Bir Shift tuşunu hareket ettirmeye çalışıyorsanız, birkaç ekstra adım vardır:

 xmodmap -e "keycode 62 = Up" # Shift => Up
 xmodmap -e "keycode 111 = Shift_R" # Up => Shift
 xmodmap -e "add shift = Shift_R" # Make the new Shift key actually do shifting
 xmodmap -e "remove shift = Up" # Prevent the old Shift key from shifting
 xset r 62 # Make the new Up key autorepeat
 xset -r 111 # Prevent the new Shift key from autorepeating

+1 Bir değiştiricinin hepsinin en unix-y cevabı (Ben zaten çoktan böyle yaptım, iBook 2 ile geri döndüm, enter tuşunun Control_R işlevine sahip olmasını istedim, ancak ayrıntıları unuttum).
rbrito

2
Lenovo Dizüstü Bilgisayarlarda klavyeyi kullananlar için önemli bir cevap
Einar Ólafsson

16

Ben sadece bir düşüncem oldu .. Sanırım "remap" ile tamamen farklı bir şey anlamına gelebilirsin .. ama cevabımı olduğu gibi bırakacağım ... (Bir anahtarı nasıl atayacağımı bilmiyorum) başka biri gibi davranmak)

GÜNCELLEME : benim 'düşüncem' onaylandı; (Yanlış soruyu cevapladım:) ... lütfen NES'in Topluluk Wiki yanıtına bakın (yukarıda kabul edildi).

Bir anahtarı yeniden eşleştirmenin iki genel yolu vardır .

  • yerel olarak belirli bir programa
    (bir anahtar farklı uygulamalarda / pencerelerde farklı şeyler için kullanılabilir)
  • Genelde belirli bir kullanıcı için
    (bir anahtar tüm pencerelerde aynı işleve sahiptir)

'Bir programa yerel' yöntemler için, bazen uygulamanın kendisinin sunduğu anahtar bağlarını değiştirmenin bir yolu vardır ... örn.

Firefoxdenilen bir ek yazılımın sahip keyconfig görüyoruz bazı bilgi için ... MozillZine yazı

Çoğu Ubuntu programı Gnome tabanlıdır ve bu Gnome uygulamalarının herhangi bir menü öğesi için tuş takımını değiştirmek için özel bir yardımcı program vardır ... Adı verilir Editable Menu Accelerator... Çok 'dokunaklı bir araçtır, ancak oldukça güçlü .. Etkinleştirebilirsiniz. çalıştırarak gconf-editor(Terminal veya Alt + F2 üzerinden) ... 'a gidin desktop- gnome- interfaceve seçin can_change_accels... Daha sonra menü öğelerini istediğiniz herhangi bir şeyi sanal olarak değiştirebilirsiniz (program / pencere başına) ... Devre dışı bırakmanızı öneririm İhtiyacınız olanı yaptıktan hemen sonra ..

Aksi takdirde Genel kısayol tuşları ayarlayabilirsiniz. Xbindkeys adında bir program kullanıyorum Xbindkeys yükleve ayrıca Ana Menü - Tercihler adlı bir seçenek de denilen bir seçenek var.Keyboard Shortcuts

Eğer xbindkeys kullanıyorsanız, onu "Başlangıç ​​Uygulamaları" na eklemeniz gerekir (Ana Menü - Tercihler) ... Ayrıca (Stefano Palazzo tarafından önerildiği gibi) Daha önce bu konuda bir cevap olarak xbindkeys hakkında daha ayrıntılı bir açıklama yazdım. askubuntu sayfası


+1, çok hoş! Bir öneri: Büyük cevabınızı başka bir sorudan bu soruya dahil etmelisiniz , belki de xbindkey'lerin yapılandırma biçimini biraz açıklayın.
Stefano Palazzo

1
Başka anahtarlar atamakla ilgili biraz işlenebilir xdotool, man sayfasını inceleyin, bu sorunu çözmek için kullandım .
Stefano Palazzo

Geçenlerde, xmodmap adlı bir araçla ve xev adlı bir araçla başka bir yaklaşım buldum. xmodmap ve xbindkeys arasındaki farkların ne olduğunu bilmiyorum, ama bu benim için oldukça iyi çalışıyor. adlandırılmış iki tercih aracıyla bazı tavsiyeler? Burada, xmodmap ve xev ubuntuforums.org/showpost.php?p=7675138&postcount=2
NES

@NES .. Görünüşe göre yanlış noktaya değindim .. Belirli bir anahtarın işletim sistemi tarafından yorumlanma biçimini, yani standart olmayan bir klavye yorumunu yeniden yazmak gibi görünüyor. standart klavye yorumlama ve basitçe varsayılan tuş atamalarını aşırı yükleme. (Sanırım
peşinizdekiler

evet, ama sorun değil. Cevap da ilginç. Adım attığım rehber adım yukarıdaki bağlantıyı yolladım. bu yüzden diğer kullanıcıların iyi bir rehbere sahip olduğu çözümü ile kısa bir cevap göndereceğim. teşekkürler fred
NES

9

İşte eşleştirmesini geçiş çalıştı nasıl ENTERanahtarı SHIFTanahtarının (ve tersi):

$ uname -a

RAPORLAR:

Linux box 2.6.32-37-generic #81-Ubuntu SMP Fri Dec 2 20:35:14 UTC 2011 i686 GNU/Linux

$ which xmodmap

RAPORLAR:

/usr/bin/xmodmap

$ which xev

RAPORLAR:

/usr/bin/xev

$ xev

(sonraki elli çizgiyi görmezden gelin)

PRESS THE ENTER KEY (notice the third line):
KeyPress event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441120, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XmbLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441271, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

PRESS THE SHIFT KEY (notice the third line):
KeyPress event, serial 30, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592202, (464,368), root:(497,440),
    state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592298, (464,368), root:(497,440),
    state 0x1, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

Önemli olan, her bir tuş basışının üçüncü satırıdır:

FOR:
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
The name "Return" is the name of the behavior of the key pressed.
The number of the key pressed is "36".

state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
The name "Shift_R" is the name of the behavior of the key pressed.
The number of the key pressed is "62".

HARİTAYI TERS

$ xmodmap -e "keycode 62 = Return"
$ xmodmap -e "keycode 36 = Shift_R"

SONUÇLARI SAKLAYIN:

$ xmodmap -pke > ~/.Xmodmap
$ vi ~/.xinitrc

EKLEMEK

 xmodmap ~/.Xmodmap

$ sudo reboot

Asıl sorun, tersinin işe yaramadığıydı. ENTERAnahtar eşleştirilmiş SHIFT_Ranahtar; ancak SHIFT_Ranahtar, anahtarla eşlenmedi ENTER. Git figürü.


7

Global remaps X'ten bağımsız olarak yapmak için, bunun yerine konsol kurulumundan (5) yararlanabilirsiniz .

Benim durumumda -key Caps Lockanahtarım kırıldığından -ep anahtarını değiştirmek Distiyorum D:)

İlk önce bir eşleme için bir şablon elde etmek için çöp tenekelerini (1) kullandım, -key durumunda Dilginç bit 32 tuş kodunun eşleşmesidir (klavyemde ); Grep düzeninde iki boşluk olduğuna dikkat edin!

$ sudo dumpkeys | grep "keycode  32" > tempfile
$ cat tempfile
keycode  32 = +d
    shift   keycode  32 = +D
    altgr   keycode  32 = +eth
    shift   altgr   keycode  32 = +ETH
    control keycode  32 = Control_d
    shift   control keycode  32 = Control_d
    altgr   control keycode  32 = Control_d
    shift   altgr   control keycode  32 = Control_d
(121 lines total...)

Caps LockUygulanacak haritayı değiştirmek için (klavyemdeki tuş kodu 58)

sed 's/32/58/' -i tempfile

Şimdi okur

keycode  58 = +d
    shift   keycode  58 = +D
    altgr   keycode  58 = +eth
(etc...)

Bu remapi varsayılan haritaya eklemek için, konsol kurulumu için remap include dosyasına eklenmesi yeterlidir

sudo sh -c 'cat tempfile >> /etc/console-setup/remap.inc'

ve konsol kurulumunun yeniden yapılandırılması gerekiyor (düşük öncelikli soruları atlayarak -phigh)

sudo dpkg-reconfigure console-setup -phigh

Şimdi remap tamamlanmalı ve açılışta otomatik olarak yüklenmelidir.


3

Tüm günümü bir kısayol oluşturmaya çalışırken geçirdim Ctrl+Pageup.

İlk denedim xmodmapama bu değiştirici olaylar oluşturamaz. Dolayısıyla, Contrololayı oluşturan bir kısayol oluşturmak mümkün değildir .

Sonra denedim xbindkeysile xmacro. Bu tür çalışır, ancak xbindkeyssistemimdeki bazı tuş kombinasyonlarını yakalayamaz, örneğin Alt + ___.

Sonunda Unity'nin kendi Klavye Kısayollarını -> Özel Kısayolları kısayolumu ayarlamak için kullandım.

Ve bunun yerine, xmacroşimdi xvkbdklavye olaylarını oluşturmak için programı kullandım , ancak bu sadece kişisel bir tercih. Hem xmacrove xvkbdneredeyse aynı şekilde çalışır. Ek bir ipucu, bir gecikme parametresi eklemek xmacroveya xvkbdolayların kaybolmamasını sağlamaktır.


2

Benim için Software Center'dan AutoKey en iyisini yaptı. Sezgisel GUI'ye sahip, yeni ciltleme eklemek için Yeni -> Öbek ve

  1. İsim ekle, Tamam
  2. "Cümle Ayarları" bölümünde, kullanılan yapıştırmanın klavyeye ayarlandığından emin olun
  3. Kullanmak istediğiniz kısayol tuşunu ekleyin
  4. Metin alanına komut ekleyiniz, örneğin sol ok tuşunu taklit etmek - öyle olacaktır <left>(özel tuşların listesi burada ).

Bu kurmak perfekt çalıştı Super+Cve Super+Vhiç Ctrl+Cve Ctrl+V. Sadece mükemmel bir çözüm bir mac VirtualBox aracılığıyla Ubuntu kullanıyorsanız
Ben

Ancak bu, bu kısayolları dinleyen diğer komutları devre dışı bırakmaz. Super+V"Bildirim listesini göster" i devre dışı bırakmak için Ayar -> Aygıtlar -> Klavye bölümüne gidin ve orada devre dışı bırakın
Ben

@Ben yup, diğer uygulamaların bağlarını gösterse harika olurdu, ama daha ziyade kek üzerine krema. Benim sorunum "Fn" tuşunu yeniden eşleştirmenin mümkün olmamasıdır. Ukk klavyeyi denemeye karar verdim - bu os'dan bağımsız olarak programlanabilir olan şey nasıl gideceğini görecek.
ego

0

Yalnızca belirli bir program için bir anahtar yeniden eşleştirmek gerekirse, ben ettik sadece eklenen hax11 için bu özelliği.

Ben değiştirmek istiyorum PgUpiçin Homeya PgDownhiç End.

Bunu hax11 ile yapmak için, programın ~/.config/hax11/profiles(örn. ~/.config/hax11/profiles/usr\lib\firefox\firefox) Altındaki profil yapılandırma dosyasını açın ve şunu ekleyin:

Enable=1
MapK112=K110
MapK117=K115
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.