Bagaimana cara mengubah konsol tombol di Linux?

36

Saya ingin bertukar Escdan CapsLockdi konsol (bukan di X, dan menggunakan xev), bagaimana saya bisa melakukannya?

OS saya adalah Ubuntu.

Vayn
sumber

Jawaban:

60

Alat untuk memanipulasi tata letak keyboard pada konsol virtual adalah loadkeys, dumpkeysdan showkey. Baca halaman manual mereka dan beri tahu diri Anda tentang seluk-beluk mereka.

Perhatikan bahwa alat ini hanya bekerja di konsol virtual, bukan di emulator terminal di lingkungan grafis seperti gnome. Pelajari perbedaannya, baca pertanyaan dan jawaban ini: https://askubuntu.com/questions/14284/why-is-a-virtual-terminal-virtual-and-what-why-where-is-the-real-terminal .

Berikut ini panduan singkat untuk melakukan apa yang Anda inginkan:

  1. Simpan tata letak keyboard Anda saat ini:

    $ dumpkeys > backup.kmap
    

    Jika terjadi kesalahan, Anda mungkin dapat memulihkan keymap menggunakan perintah:

    $ sudo loadkeys backup.kmap
    

    Jika keyboard sangat kacau sehingga Anda bahkan tidak bisa melakukan ini, maka satu-satunya pilihan Anda yang tidak melibatkan sulap kernel kuno adalah reboot.

  2. Periksa kode kunci mana yang ditetapkan untuk kunci Anda:

    $ showkey
    

    Sekarang tekan tombol ESC dan tombol CAPSLOCK. Kode kunci harus muncul di layar. Perhatikan kode kunci. Pada sistem saya ESC memiliki kode kunci 1 dan CAPSLOCK memiliki kode kunci 58. showkeyakan berakhir setelah 10 detik tidak aktif (setidaknya itu terjadi di ubuntu 10,04 saya).

  3. Perhatikan nama kunci ESC dan CAPSLOCK dari dumpkeys:

    $ dumpkeys | grep 1
    ...
    keycode   1 = Escape
    ...
    $ dumpkeys | grep 58
    ...
    keycode  58 = CtrlL_Lock
    ...
    
  4. Perhatikan baris keymap dari dumpkeys:

    $ dumpkeys | head -1
    keymaps 0-127
    
  5. Buat file keymap yang mengaktifkan ESC dan CAPSLOCK:

    keymaps 0-127
    keycode   1 = CtrlL_Lock
    keycode  58 = Escape
    
  6. Muat keymap:

    $ sudo loadkeys swap_esc_capslock.kmap
    
  7. Uji: Menguji kunci CAPSLOCK sudah jelas. Cukup tekan tombol CAPSLOCK mereka dan periksa apakah kunci lain keluar huruf besar. Untuk menguji kunci ESC Anda dapat menggunakan CTRL + V diikuti oleh ESC. Itu harus dicetak ^[. CTRL + V membuat shell mencetak kunci berikutnya kata demi kata alih-alih menafsirkannya.

Untuk mendapatkan modifikasi ini pada setiap reboot, tulis baris berikut di /etc/rc.localfile Anda :

/usr/bin/loadkeys /path/to/swap_esc_capslock.kmap

Informasi dikumpulkan dari berbagai halaman, termasuk, tetapi tidak terbatas pada:

lesmana
sumber
5
Anda juga dapat menggunakan sudo setupcon --saveuntuk membuat perubahan permanen, daripada mengedit rc.local. Itu pada dasarnya sama dengandumpkeys < /dev/tty1 | gzip > /etc/console-setup/cached.kmap.gz
bukzor
Hal ini lebih aman untuk menggunakan /usr/bin/loadkeysdalam /etc/rc.localkarena variabel lingkungan jalan tidak dijamin akan ditetapkan pada tahap ini. Dan sudotidak diperlukan di rc.local.
Agustus Karlstrom
@AugustKarlstrom Perintah yang rc.localdijalankan setiap kali sistem melakukan boot. @ bukzor ini sudo setupconadalah tidak di rc.local, itu adalah satu kali perintah setup, yang menggantikan keymap sistem default, tanpa menambahkan kode runtime startup. Menambahkan loadkeys untuk rc.local, menambah ekstra start up kode dan duplikat apa yang sudah dilakukan oleh loadkeys sistem default. The rc.localMetode benar-benar bisa kurang aman karena tergantung pada jalur non-standar untuk keymap tersebut.
RobertL
@ Robert tolong jelaskan setupconmetodenya. Tambahkan jawaban Anda sendiri atau edit jawaban saya jika Anda mau.
lesmana
Saya tidak dapat memverifikasi pernyataan @ bukzor tentang setupcon. Tampaknya Agustus membuat asumsi bahwa sudo setupcon --saveakan masuk ke rc.localmana saya tidak berpikir itu benar, tetapi jika ya, Anda tidak perlu sudomasuk rc.local. Saya pikir kami perlu info lebih lanjut sebelum memperbarui jawaban Anda. Pertanyaan utamanya adalah "Bagaimana cara menginstal keymap yang dimodifikasi sehingga dapat dimuat secara otomatis selama proses booting?" Saya benar-benar tidak tahu mana cara yang lebih baik, rc.localatau menginstal keymap, atau bahkan jika menginstal keymap akan berhasil. Saya telah meneliti ini akhir-akhir ini dan saya akan memeriksanya kembali di sini.
RobertL
4

Gunakan 'ctrl: nocaps' bukan 'ctrl: swapcaps' jika Anda hanya ingin memiliki dua tombol capslocks (capslock dengan nama lain masih sangat tidak berguna).

X11: (lihat juga /usr/share/X11/xkb/rules/base.lst:)

sudo vim /etc/default/keyboard
    XKBOPTIONS="ctrl:swapcaps"
udevadm trigger --subsystem-match=input --action=change
sudo restart lightdm

Konsol teks: (dicuri dari setupcon)

#!/bin/sh
. /etc/default/console-setup 
. /etc/default/keyboard
ckbcomp $acm_option $rules_option -model "$XKBMODEL" \
            "$XKBLAYOUT" "$XKBVARIANT" "$XKBOPTIONS" \
            | gzip -9 2>/dev/null >/etc/console-setup/cached.kmap.gz
loadkeys /etc/console-setup/cached.kmap.gz
bukzor
sumber