GNU/Linux >> Belajar Linux >  >> Linux

aturan udev untuk memuat tata letak keyboard secara otomatis saat keyboard usb dicolokkan

Saya menemukan cara untuk menyiasatinya, meskipun agak sulit.

Saya sampai pada titik yang persis sama hari ini dalam mencoba mengatur dua keyboard dengan udev, setxkbmap, dan xinput --list dan agar mereka bekerja dengan usb hotplugging. Saya bertukar kunci, tidak mengubah tata letak, tetapi semuanya sama, setelah Anda mengidentifikasi keyboard Anda pada hotplug dan secara kondisional dapat memanggil setxkbmap, maka Anda harus dapat mengatur bahasa keyboard yang telah Anda tentukan saja . Daftar tata letak keyboard dapat ditemukan di sini ls -l /usr/share/kbd/keymaps/i386/ dan Anda dapat menemukan nama perangkat Anda untuk digunakan dengan xinput -list .

  1. Anda ingin mengganti rizumu dengan nama pengguna Anda, karena menurut saya tidak mungkin cara untuk melakukan ini tanpa eksplisit.
  2. Pastikan Anda memahami your nama keyboard.
  3. Gunakan lsusb untuk menemukan ID Perangkat Keras yang perlu Anda setel dalam aturan udev. Keyboard das saya terlihat seperti ini Bus 002 Device 009: ID 04d9:2013 Holtek Semiconductor, Inc.

Saya pertama kali menyiapkan aturan udev untuk mendeteksi keyboard secara otomatis dengan membuat aturan udev:

Dalam file /etc/udev/rules.d/00-usb-keyboards.rules :

ACTION=="add", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="2013", RUN+="/home/rizumu/bin/kbd_udev", OWNER="rizumu"

Saya punya dua file ~/bin/kbd dan ~/bin/kbd_udev. Pastikan mereka memiliki izin yang tepat chmod 755 ~/bin/kbd*

~/bin/kbd_udev skrip berisi:

#!/bin/bash
/home/rizumu/bin/kbd &

Dan Anda akan melihat bahwa yang dilakukannya hanyalah memanggil ~/bin/kbd di latar belakang, sehingga udev dapat menyelesaikan prosesnya dan mengaktifkan keyboard. Di dalam ~/bin/kbd skrip kita tidur sebentar, karena kita perlu menunggu hingga keyboard diaktifkan agar kita bisa mendapatkan id perangkat menggunakan xinput. Untuk mencapai ini saya telah menetapkan beberapa variabel dan mengekspornya sehingga xinput setxkbmap dapat melakukan pekerjaan mereka:DISPLAY , XAUTHORITY , HOME , dan satu daskb_id untuk id daskeyboard saya:

#!/bin/bash
sleep 1
DISPLAY=":0.0"
HOME=/home/rizumu/
XAUTHORITY=$HOME/.Xauthority
export DISPLAY XAUTHORITY HOME
daskb_id=`xinput -list | grep -i 'daskeyboard' | grep -o id=[0-9]. | grep -o [0-9]. | head -1`

xset r rate 200 30
setxkbmap -layout colemak
setxkbmap -option ctrl:nocaps
if [ "${daskb_id}" ]; then
    setxkbmap -device "${daskb_id}" -option altwin:swap_lalt_lwin
fi

Bergantung pada distro Anda, Anda mungkin sudah memiliki aturan udev untuk keyboard di /lib/udev/rules.d/64-xorg-xkb.rules. Di Ubuntu, ini mengimpor /etc/default/keyboard, yang memiliki opsi kira-kira seperti ini:

XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS=""

Untuk penyiapan saya, saya menemukan bahwa aturan bawaan ini dijalankan setelah aturan udev khusus saya, dan mengesampingkan pengaturan saya. Sebaliknya saya mengubah XKBOPTIONS di /etc/default/keyboard menjadi:

XKBOPTIONS="-option ctrl:nocaps"

Untuk mendapatkan perilaku "Caps Lock is Control" yang saya inginkan di semua keyboard.


Jika Anda menjalankan GNOME maka Anda harus menonaktifkan plugin manajemen keyboardnya agar tidak mengesampingkan perubahan tata letak Anda.

gconftool-2 --toggle /apps/gnome_settings_daemon/plugins/keyboard/active

Jalankan lagi perintah yang sama untuk mengaktifkannya sesuai keinginan.


Linux
  1. 4 Cara Berguna untuk Mengetahui Nama Perangkat USB yang Dicolokkan di Linux

  2. Bagaimana Cara Mendapatkan Kunci Usb Untuk Pemasangan Otomatis?

  3. Bagaimana Cara Memicu Suatu Peristiwa Dalam Skrip Shell Saat Perangkat Usb Dihapus?

  1. Hubungan Tata Letak Keyboard Dan Xmodmap?

  2. Tata Letak Keyboard Apa yang Memungkinkan Saya Mengetik ?

  3. Linux:ubah tata letak keyboard dengan cepat

  1. Tata letak keyboard Xephyr

  2. Menggunakan aturan udev untuk menjalankan skrip pada penyisipan USB

  3. Ubah tata letak keyboard GRUB di tahap 1