Bagaimana cara memetakan kembali kunci atau perangkat tertentu?

236

Saya mencari cara untuk memetakan kembali kunci-kunci tertentu di ubuntu.

yaitu

Saya ingin mengubah PgUpke Homeatau PgDownke End.

Apakah ada perintah bawaan atau alat yang ada untuk menentukan kunci di Ubuntu / GNOME?

NES
sumber
checkout jawaban saya di sini . Tidak layak menyalin dan menempelkan jawaban yang sama. Mungkin itu akan membantu Anda.
Rahul Virpara
1
Adakah binding seperti Emacs di sini untuk CTRL-P / N untuk langkah unit?
Léo Léopold Hertz 준영
Karena beberapa waktu xmodmapberkurang! untuk mendapatkan pengaturan sistem yang harus Anda gunakan xkb. Jadi edit file bahasa /usr/share/X11/xkb/symbols/untuk menambahkan perubahan Anda di sana. Lihat askubuntu.com/a/898462/34298
rubo77

Jawaban:

249

Perhatikan: Pada 2013, Ubuntu dan turunannya tidak lagi digunakan xmodmap, melainkan digunakan xkb. Untuk informasi lebih lanjut, lihat jawaban ini . Jawaban di bawah ini tidak lagi relevan untuk rilis saat ini.


Untuk memetakan kembali kunci tertentu, Anda memerlukan dua alat. Xev pertama (alat baris perintah) dan xmodmap kedua (juga alat baris perintah). Keduanya harus tersedia di Ubuntu tanpa menginstalnya secara ekstra.

  1. Mulai jendela terminal dan jalankan xev. Sekarang aktif dan menunggu Anda untuk menekan tombol. Kemudian tekan tombol yang perilakunya ingin Anda ubah. yaitu PgUp.

  2. xevakan menampilkan beberapa informasi tentang tombol yang ditekan. Baris ketiga itu penting. Seharusnya terlihat mirip dengan:

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

    dalam contoh ini Prioradalah nama perilaku yang diberikan kunci pada saat ini, nomor kode kunci adalah id internal untuk mengenali kunci tersebut. Sekarang lakukan ini dengan kunci lain yaitu PgDownmemberikan output ini

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

    Di sini lagi bagian yang menarik bagi kita adalah keycode 115dan Next- nama perilaku.

  3. sekarang ketika Anda ingin menukar menggunakan dua kunci xmodmap.

     xmodmap -e "keycode 110 = Next"
    

    Ini mengubah kunci dengan kode kunci 110 pada keyboard Anda ke tindakan Next. Sederhana saja.

    Perhatikan bahwa jika kunci yang Anda pemetaan harus memiliki makna yang berbeda ketika digunakan dengan Shiftkunci (misalnya untuk tata letak keyboard Inggris, Shift+ 2memberikan tanda kutip) maka Anda dapat dengan mudah mendaftar perintah sekunder setelah yang pertama. Misalnya jika Anda ingin kunci dengan kode 53 memetakan backslash secara normal, tetapi ke simbol bar saat digunakan dengan shift, Anda mungkin melakukan:

     xmodmap -e "keycode 53 = backslash bar"
    

Informasi tambahan: Urutan pemetaan ini adalah Key, Shift+Key, mode_switch+Key, mode_switch+Shift+Key, AltGr+Key, AltGr+Shift+Key. Untuk melewati penggunaan kolom NoSymbol. Selain itu, berikut adalah daftar komprehensif semua keyyms.

Catatan: Perubahan ini hanya untuk sesi X aktif dan akan hilang setelah reboot. Ketika Anda ingin menyimpan perubahan secara permanen, Anda harus menjalankan perintah berikut setelah yang di atas:

xmodmap -pke >~/.Xmodmap

(itu membuat file bernama .Xmodmapdi direktori home Anda ( ~))

Maka Anda harus membuat file bernama .xinitrcdi direktori home Anda di mana Anda menaruh perintah xmodmap .Xmodmap.

Anda sekarang dapat memodifikasi .Xmodmapdan menjalankan xmodmap .Xmodmapdari konsol untuk melihat perubahan dengan segera. Perubahan .Xmodmapakan tetap ada.

sumber: Ubuntu Foruns

Barang bonus:

Jika tombol yang Anda remapping memiliki perilaku berbeda tergantung pada kondisi (seperti bagaimana tombol pada keyboard numerik bergantung pada NumLock), Anda cukup melakukan xmodmap -pmuntuk mendapatkan daftar pengubah dan kemudian lakukan:

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

Misalkan, misalnya, bahwa Anda ingin mendapatkan titik bukannya koma pada keyboard numerik (berguna untuk sebagian besar programmer), tetapi Anda ingin menjaga perilaku "hapus" ketika NumLock dimatikan.

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2, Karena xmodmap -pmmemberitahu kita bahwa mod2adalah Num_Lock, nama-nama lain yang diperoleh dengan menekan tombol di xev.

NES
sumber
3
xevtidak dapat menangkap Fnpenekanan tombol
om-nom-nom
3
Jawaban yang dipilih tidak berfungsi untuk memetakan ulang kunci Caps-lock untuk saya di Ubuntu 12.10. Saya dapat melakukan ini dengan masuk ke Pengaturan Sistem -> Keyboard -> Pengaturan Tata Letak -> Opsi, yang memiliki daftar kunci dan perilaku alternatif. Bekerja dengan sempurna di Unity dan terminal.
Allyl Isocyanate
1
Jika Anda memiliki beberapa keyboard yang terhubung, akankah alat ini melihat perbedaan antara tombol yang sama pada keyboard lain?
stommestack
1
Aneh, saya melakukan segalanya, tetapi keymappings saya masih reset setelah restart.
Costa
1
Saya rasa saya tidak memiliki -eventbendera di Ubuntu 12.04. Itu melempar kesalahan dan tidak menyebutkan "acara" di man xev.
isomorfisma
20

Jika Anda mencoba untuk memindahkan tombol Shift, ada beberapa langkah tambahan:

 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
cmcginty
sumber
+1 Jawaban paling unix-y dari semua itu untuk pengubah (saya sudah melakukannya dengan cara, kembali dengan iBook 2 saya, ketika saya ingin kunci enter memiliki fungsi Control_R, tetapi lupa detailnya).
rbrito
2
Jawaban penting bagi pengguna yang menggunakan keyboard di Laptop Lenovo
Einar Ólafsson
16

Saya baru saja mengalami renungan .. Saya pikir Anda mungkin bermaksud sesuatu yang sama sekali berbeda dengan "remap" .. tapi saya akan meninggalkan jawaban saya seperti itu ... (Saya tidak tahu bagaimana menetapkan ulang satu kunci untuk berperilaku seperti orang lain)

UPDATE : 'renungan' saya telah dikonfirmasi; (Saya telah menjawab pertanyaan yang salah:) ... silakan lihat jawaban Wiki Komunitas NES (diterima di atas).

Ada dua cara umum untuk memetakan kembali sebuah kunci.

  • secara lokal ke program tertentu
    (kunci dapat digunakan untuk hal-hal yang berbeda di berbagai aplikasi / windows)
  • secara global untuk pengguna tertentu
    (kunci memiliki fungsi yang sama di semua jendela)

Untuk metode 'lokal ke program', kadang-kadang ada cara untuk mengubah ikatan kunci yang ditawarkan oleh aplikasi itu sendiri ... misalnya.

Firefoxmemiliki addon bernama keyconfig ... untuk beberapa info lihat posting MozillZine ini

Sebagian besar program Ubuntu berbasis Gnome dan ada utilitas khusus untuk memodifikasi pengikat tombol untuk semua item menu dari aplikasi Gnome ini ... Disebut Editable Menu Accelerator... Ini adalah alat yang sangat 'sensitif', tetapi sangat kuat .. Anda dapat mengaktifkan dengan menjalankan gconf-editor(via Terminal atau Alt + F2) ... navigasikan ke desktop- gnome- interfacedan pilih can_change_accels.... Anda kemudian dapat mengubah item menu ke virtual apa pun yang Anda suka (per program / jendela) ... Saya sarankan Anda menonaktifkan segera setelah Anda melakukan apa yang Anda butuhkan ..

Kalau tidak, Anda dapat mengatur hotkey Global. Saya menggunakan program yang disebut xbindkeys Instal xbindkeys , dan ada juga pilihan yang tersedia melalui Menu Utama - Preferensi, yang disebutKeyboard Shortcuts

Jika Anda menggunakan xbindkeys, Anda harus menambahkannya ke "Aplikasi Startup" Anda (Menu Utama - Preferensi) ... Juga (seperti yang disarankan oleh Stefano Palazzo) Sebelumnya saya telah menulis deskripsi xbindkeys yang lebih terperinci dalam jawaban tentang ini halaman askubuntu

Peter.O
sumber
+1, sangat bagus! Saran: Anda harus mengintegrasikan jawaban hebat Anda dari pertanyaan lain ke pertanyaan ini, mungkin juga sedikit menjelaskan format konfigurasi xbindkeys.
Stefano Palazzo
1
Sedikit tentang penugasan kunci lain dapat ditangani oleh xdotool, periksa halaman manual, saya telah menggunakannya untuk menyelesaikan masalah ini .
Stefano Palazzo
Saya baru-baru ini menemukan pendekatan lain dengan alat yang disebut xmodmap dalam kombinasi dengan alat yang disebut xev. saya tidak tahu apa perbedaan antara xmodmap dan xbindkeys, tetapi ini bekerja cukup baik untuk saya. beberapa saran dengan alat untuk memilih dari dua nama? Berikut ini adalah panduan langkah demi langkah yang sangat membantu yang menggambarkan xmodmap dan xev ubuntuforums.org/showpost.php?p=7675138&postcount=2
NES
@ NES .. Tampaknya saya telah membahas poin yang salah .. Anda tampaknya ingin memetakan kembali cara tombol tertentu diinterpretasikan oleh OS, yaitu, interpretasi keyboard non-standar, sedangkan saya telah merujuk ke standar keyboard-interpretasi, dan cukup membebani penugasan kunci default. (Saya pikir apa yang Anda kejar mirip dengan menukar tombol kiri dan kanan mouse) .. Yah sepertinya jawaban saya baik untuk hal yang salah :)
Peter.O
ya, tapi tidak masalah. jawabannya juga menarik. panduan langkah demi langkah saya memposting tautan di atas adalah cara yang benar. jadi saya akan memposting jawaban singkat dengan solusi yang pengguna lain punya panduan bagus. terima kasih fred
NES
9

Berikut adalah cara saya mencoba mengalihkan pemetaan ENTERkunci ke SHIFTkunci (dan sebaliknya):

$ uname -a

LAPORAN:

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

$ which xmodmap

LAPORAN:

/usr/bin/xmodmap

$ which xev

LAPORAN:

/usr/bin/xev

$ xev

(abaikan sekitar lima puluh baris berikutnya)

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

Yang penting adalah baris ketiga dari setiap penekanan tombol:

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

KEMBALI PEMETAAN:

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

SIMPAN HASIL:

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

MENAMBAHKAN

 xmodmap ~/.Xmodmap

$ sudo reboot

Masalah utama adalah bahwa pembalikan TIDAK bekerja. The ENTERkunci dipetakan ke SHIFT_Rkunci; tetapi SHIFT_Rkunci tidak dipetakan ke ENTERkunci. Sosok pergi.

Bill Davis
sumber
7

Untuk melakukan remaps global secara independen dari X, Anda dapat menggunakan konsol-setup (5) sebagai gantinya.

Dalam kasus saya, saya ingin memetakan kembali Caps Lockkunci D, karena kunci saya Drusak :)

Pertama saya menggunakan dumpkeys (1) untuk mendapatkan templat untuk pemetaan, dalam kasus D-key, bit yang menarik adalah pemetaan untuk kode 32 (pada keyboard saya); Perhatikan bahwa ada dua spasi dalam pola grep!

$ 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...)

Untuk mengubah peta untuk diterapkan ke Caps Lock(kode 58 pada keyboard saya) sebagai gantinya

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

Sekarang berbunyi

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

Untuk menambahkan remap ini ke peta default, itu hanya perlu ditambahkan ke file remap include untuk setup-konsol

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

dan konsol-pengaturan perlu dikonfigurasi ulang (melewatkan pertanyaan dengan prioritas rendah -phigh)

sudo dpkg-reconfigure console-setup -phigh

Sekarang remap harus selesai, dan dimuat secara otomatis saat boot.

arand
sumber
3

Saya menghabiskan satu hari penuh untuk mencoba membuat jalan pintas Ctrl+Pageup.

Saya pertama kali mencoba xmodmaptetapi itu tidak dapat menghasilkan acara pengubah. Jadi tidak mungkin untuk membuat jalan pintas yang menghasilkan misalnya Controlacara.

Saya kemudian mencoba xbindkeysdengan xmacro. Itu semacam berfungsi, tetapi xbindkeystidak dapat menangkap beberapa kombinasi tombol pada sistem saya, seperti Alt + ___.

Jadi saya akhirnya menggunakan Pintasan Keyboard Unity sendiri -> Pintasan Khusus untuk mengatur pintasan saya.

Dan alih-alih xmacro, saya sekarang menggunakan xvkbdprogram untuk menghasilkan acara keyboard, tapi itu hanya preferensi pribadi. Keduanya xmacrodan xvkbdbekerja hampir sama. Satu tip tambahan adalah menambahkan parameter penundaan di xmacroatau xvkbduntuk memastikan bahwa acara tidak hilang.

HRJ
sumber
2

Bagi saya AutoKey dari Software Center bekerja paling baik. Ini memiliki GUI intuitif, untuk menambahkan klik baru mengikat Baru -> Frasa dan

  1. Tambahkan nama, klik OK
  2. Di bagian "Pengaturan Frasa", pastikan penggunaan pasta diatur ke keyboard
  3. Tambahkan hotkey yang ingin Anda gunakan
  4. Tambahkan perintah ke dalam bidang teks, misalnya untuk meniru tombol panah kiri - itu akan terjadi <left>(daftar kunci khusus ada di sini ).
ego
sumber
Perfekt ini berfungsi untuk mengatur Super+Cdan Super+Vke Ctrl+Cdan Ctrl+V. Hanya solusi sempurna ketika menggunakan Ubuntu via VirtualBox di mac
Ben
Namun, ini tidak menonaktifkan perintah lain yang mendengarkan pintasan ini. Untuk menonaktifkan Super+V"tampilkan daftar pemberitahuan" pergi ke Pengaturan -> Perangkat -> Keyboard dan nonaktifkan di sana
Ben
@Ben yup, alangkah baiknya jika itu menampilkan binding aplikasi lain, tapi agak icing pada kue. Masalah saya adalah tidak mungkin untuk memetakan kembali kunci "Fn". Saya telah memutuskan untuk mencoba keyboard uhk - hal yang dapat diprogram independen dari os, akan melihat bagaimana kelanjutannya.
ego
0

Jika Anda perlu memetakan kembali kunci untuk program tertentu saja, saya baru saja menambahkan fitur ini ke hax11.

Saya ingin mengubah PgUpke Homeatau PgDownke End.

Untuk melakukan ini dengan hax11, buka file konfigurasi profil program di bawah ~/.config/hax11/profiles(misalnya ~/.config/hax11/profiles/usr\lib\firefox\firefox), dan tambahkan:

Enable=1
MapK112=K110
MapK117=K115
Vladimir Panteleev
sumber