GNU/Linux >> Belajar Linux >  >> Linux

Mengubah Tata Letak/pemetaan Keyboard Pada Konsol (tty) Dan X Dengan Cara Agnostik X/konsol?

Saya dapat mengubah tata letak/pemetaan keyboard saat Sistem X Window berjalan menggunakan ~/.Xmodmap (dan saya kira Anda juga dapat melakukannya melalui protokol X secara langsung, misalnya menggunakan libxcb sebagai pembungkus di sekitar panggilan protokol X).

Saya dapat melakukan hal yang sama (agak) di konsol/tty (mis. ketika X tidak berjalan) menggunakan loadkeys .

Apakah ada cara untuk menyesuaikan tata letak keyboard dengan cara yang sama, tetapi dari sumber tunggal , sedemikian rupa sehingga memengaruhi X dan konsol, mis. dengan cara yang “agnostik X-dan-konsol”?

(Satu-satunya cara yang dapat saya pikirkan adalah dengan menulis "driver keyboard" yang berbicara dengan antarmuka input kernel, evdev , dan mengirimkan input yang Anda inginkan (melalui uinput ?), atau apa, tapi saya tidak tahu apakah ini masuk akal, atau ada cara yang lebih mudah.)

Jawaban yang Diterima:

Ya, ada caranya, dan memang begitulah cara paket penyiapan konsol Debian melakukannya.

  • Tata letak keyboard ditentukan dalam istilah XKB (model, tata letak, varian, dan opsi) oleh administrator dalam file bernama keyboard , biasanya /etc/default/keyboard . Ini adalah sumber tunggal. Itu dapat diedit dengan editor teks.
  • setxkbmap program diberikan pengaturan XKB yang sama dan mengonfigurasi server X11 yang sesuai.
    • Skrip pengelola pasca-pemasangan paket konfigurasi keyboard menjalankan setxkbmap langsung, dengan /etc/default/keyboard pengaturan, jika menemukan dirinya dengan layar X11. Jadi dpkg-reconfigure keyboard-configuration dijalankan dari emulator terminal GUI X11 akan memengaruhi tata letak keyboard X11.
  • setupcon skrip mengambil pengaturan XKB ini, meneruskannya melalui ckbcomp utilitas untuk menghasilkan peta keyboard, dan memuat peta keyboard itu ke terminal virtual kernel dengan loadkeys /kbdcontrol .
    • Skrip ini dijalankan pada bootstrap sistem oleh suatu layanan.
    • Ini juga dapat dijalankan secara manual di lain waktu.

Sistem operasi systemd lainnya bekerja secara berbeda tetapi juga memiliki satu sumber.

  • Tata letak, varian, dan opsi XKB disimpan di /etc/X11/xorg.conf.d/00-keyboard.conf . Ini adalah satu-satunya sumber.
    • File ini langsung dibaca oleh server X11 saat startup dan menyetel peta keyboard X11 secara langsung.
    • File ini diurai oleh systemd-localed saat memulai. File tidak dapat diedit secara berguna dengan editor teks saat systemd-localed sedang berjalan, karena layanan akan dengan senang hati menimpanya dengan informasi dalam memorinya sendiri.
    • Untuk mengubah informasi XKB, jalankan localectl , yang berbicara ke server lain yang pada gilirannya berbicara dengan systemd-localed .
  • systemd-localed mengonversi pengaturan XKB menjadi nama peta keyboard terminal virtual menggunakan pemetaan di /usr/share/systemd/kbd-model-map , yang kemudian ditulis ke /etc/vconsole.conf . Tidak seperti sistem Debian, sistem ini tidak menghasilkan peta dengan cepat dari informasi XKB, tetapi hanya memilih peta statis yang telah disediakan sebelumnya yang tercantum dalam file peta.
  • systemd-vconsole-setup berjalan pada bootstrap, membaca /etc/vconsole.conf , dan memuat peta keyboard ke terminal virtual kernel dengan menjalankan loadkeys .

Bacaan lebih lanjut

  • keyboard . Panduan Pengguna penyiapan konsol . Debian.
  • ckbcomp . Panduan Pengguna penyiapan konsol . Debian.
  • Andrew T. Young (2011). Konfigurasi Keyboard .
  • Di mana Xkb mendapatkan konfigurasinya?
  • https://unix.stackexchange.com/a/326804/5132
Terkait:Script mengeksekusi loop hanya sekali?
Linux
  1. Menggunakan Reddit dari konsol pada tahun 2020

  2. Ubah Font Konsol mode Teks?

  3. Ubah Tata Letak Keyboard Di Lightdm?

  1. printk dan tingkat log konsol

  2. Hapus garis konsol yang dicetak saat ini

  3. Apa cara yang benar untuk membuat aplikasi PyQt saya berhenti saat dimatikan dari konsol (Ctrl-C)?

  1. Saya ingin menunggu deskriptor file dan mutex, apa cara yang disarankan untuk melakukan ini?

  2. Bagaimana saya bisa mengubah tata letak keyboard input saat berada di konsol?

  3. Linux:Perbedaan antara /dev/console , /dev/tty dan /dev/tty0