Saya sering memasang keyboard USB ke laptop saya (selain monitor eksternal dan mouse, yang semuanya mengubah laptop saya menjadi komputer desktop) dan saya lebih suka menggunakan tata letak keyboard yang berbeda.
Saya harus mengubah tata letak keyboard saat ini secara manual setiap kali saya memasang keyboard USB ini.
Dan saya ingin menggunakan cara otomatis untuk ini, jika memungkinkan.
Jawaban Radu untuk pertanyaan di sini memberikan beberapa petunjuk, tetapi sepertinya saya akan memerlukan skrip startup untuk tugas ini karena ID perangkat untuk keyboard USB saya berubah setiap kali komputer dinyalakan.
Skrip startup ini mungkin pertama kali akan menyertakan perintah xinput -list | grep "USB Keyboard"
, dan perintah lain untuk mengambil nomor ID Keyboard USB pertama yang ditampilkan dan kemudian menggunakannya dalam perintah terakhir untuk mengatur tata letak yang saya pilih untuk keyboard USB itu seperti di bawah ini:
setxkbmap -device <NUMBER> -layout <LAYOUT>
sumber
Jawaban:
Setelah sedikit riset, saya telah menemukan solusi, meskipun saya masih terbuka untuk jawaban lain (mungkin lebih baik).
Berikut ini skrip startup (yang dapat ditambahkan ke Aplikasi Startup ) yang akan mengatur variabel usbkbd_layout yang dimasukkan secara otomatis ke perangkat id perangkat usbkbd yang ditemukan dalam daftar xinput :
Skrip ini cukup berguna (dan lebih stabil) untuk skenario di mana pengguna mulai menggunakan laptop pada pengaturan desktop (dengan keyboard eksternal, mouse dan monitor, dll.), Dan juga dapat dijalankan secara manual setiap kali keyboard USB eksternal dipasang ...
================================================== ========================
SOLUSI YANG LEBIH BAIK (hampir sempurna) - ditemukan berkat MinimusHeximus dan masing-masing kontributor pada utas yang ia sebutkan dalam komentarnya di bawah:
Saya sekarang bisa saja meng-plugin keyboard USB saya dan secara otomatis menerapkan tata letak keyboard (TR-F) yang berbeda sambil tetap mempertahankan tata letak keyboard default (TR-Q) di laptop saya!
Berikut adalah file dan isinya yang memungkinkan ini:
/etc/udev/rules.d/00-usb-keyboard.rules
/home/sadi/.bin/usb-keyboard-in_udev
/home/sadi/.bin/usb-keyboard-in
/home/sadi/.bin/usb-keyboard-out_udev
/home/sadi/.bin/usb-keyboard-out
Catatan:
chmod - 755 /home/sadi/.bin/usb-keyboard-*
UNTUK MENYESUAIKAN SETUP INI UNTUK PERSYARATAN YANG BERBEDA:
lsusb
(Misalnya, sayalsusb
keluaran memiliki ini untuk Keyboard USB saya:Bus 001 Device 006: ID 09da:0260 A4 Tech Co., Ltd
)xinput -list | grep "USB Keyboard"
memberi saya dua baris;↳ USB Keyboard id=14 [slave keyboard (3)]
dan↳ USB Keyboard id=16 [slave keyboard (3)]
; yang kemudian disaring denganawk
menggunakan "=" sebagai pembatas bidang dan menangkap bagian kedua; kemudian memotong hanya dua digit pertama, dan kemudian hanya menggunakan nilai di baris pertama)sumber
IF
saya harus menggunakan aFOR
. Ini bekerja untuk saya sekarang, terima kasih! gist.github.com/zvictor/193b567c14b5b6a679feOrang dapat menentukan opsi driver X11 di dalam aturan udev, tidak ada skrip khusus yang diperlukan. Sebagai contoh, berikut adalah isi dari /etc/udev/rules.d/99-usb-kbd.rules saya
Aturan ini memastikan bahwa keyboard USB tertentu menggunakan tata letak AS di Xorg (keyboard internal laptop saya adalah bahasa Jerman, dan ini juga tata letak utama saya). Poin-poin penting:
idVendor
danidProduct
perangkat Anda menggunakanlsusb
atauevtest
/usr/share/X11/xkb/symbols
. Perhatikan untuk menentukan tata letak yang valid dan varian yang valid./lib/udev/rules.d/64-xorg-xkb.rules
sumber
/var/log/Xorg.0.log
kemungkinan masalah. Anda juga dapat menggunakanudevadm info
untuk memeriksa apakah pengaturan diterapkan dengan benar.gsettings set org.gnome.settings-daemon.plugins.keyboard active false
. Jika Anda juga menambahkan catatan seperti itu, saya akan mencoba untuk menandai Anda sebagai yang jawaban (bukan canggung itu, panjang dan berkelok-kelok jalan ;-)/usr/share/X11/xkb/rules/evdev.lst
Saya baru saja meningkatkan solusi ini untuk keyboard Typematrix bépo (versi perancis dari dvorak yang sangat baik dioptimalkan) dan dalam konteks sistem yang luas (itu mengandaikan bahwa Anda memiliki akses root ke mesin). Hanya perlu 3 file untuk bekerja. Anda dapat berkonsultasi dengan file log jika gagal untuk mencari tahu apa yang gagal.
/etc/udev/96-usb-keyboard.rules
/etc/udev/bepo-typematrix-kbd.sh (benar-benar diperlukan untuk menggunakan skrip latar belakang menengah)
/ etc / udev / bepo-typematrix-kbd
sumber
Setelah banyak mengutak-atik, inilah yang saya jalankan sekarang. Mungkin saya akan menulis artikel yang lengkap dan menerbitkan kode dalam repositori, jika itu menarik.
Siapkan aturan baru yang ditetapkan untuk udev seperti itu:
Aturan seharusnya memanggil skrip shell setiap kali beberapa tindakan dipicu oleh perangkat dengan kombinasi yang diberikan vendor dan ID produk.
Setelah menambahkan set aturan baru, restart layanan udev:
Catatan: Saya tidak dapat mencapai hasil yang dapat diandalkan dengan memberikan aturan pencocokan yang lebih spesifik dalam file itu. Paling signifikan, menambahkan
ACTION
aturan yang cocok tidak berhasil. Sejauh yang saya tahu, skrip itu dipicu pula. Saat menambahkanACTION=="add"
, skrip masih akan dipanggil saat melepas perangkat. Sangat aneh dan membingungkan.Namun tindakan yang memicu aturan udev akan tersedia untuk skrip yang dipanggil seperti yang ditunjukkan di bawah ini.
Selanjutnya, skrip itu sendiri. Ya tidak cukup. Perhatikan
wrapper
akhiran dalam nama file. Ini menunjukkan bahwa ini bukan skrip aktual tetapi pembungkus yang memanggil skrip dan menjalankannya di latar belakang sehingga udev dapat menyelesaikan prosesnya.~/.bin/switch-kb-layout-wrapper.sh
:Variabel
ACTION
berisi tindakan udev yang dipicu oleh perangkat. Ini menghasilkan nilai sepertiadd
(perangkat dicolokkan) danremove
(perangkat dihapus). Kami akan menggunakannya nanti.~/.bin/switch-kb-layout.sh
:Ganti nama pengguna saya dengan milik Anda saat mengatur
HOME
variabel ($(whoami)
tidak akan berfungsi di sini, karena ini tidak akan dipanggil oleh pengguna Anda tetapi olehroot
).Untuk tujuan pengujian, saya menambahkan beberapa baris yang mencatat peristiwa tertentu ke file di direktori home saya untuk melihat apakah semuanya berfungsi. Anda dapat menghapus ini dengan hemat.
Akhirnya, skrip ini harus memiliki izin eksekusi. Mungkin juga penting untuk dicatat bahwa skrip ini akan dipanggil oleh
root
pengguna, jadi berhati-hatilah dengan apa yang Anda lakukan di sana.sumber
gsettings set org.gnome.settings-daemon.plugins.keyboard active false
tidak berfungsi sebagaimana dimaksud, karena skrip dijalankan olehroot
. Dalam pengujian saya, saluran tidak berpengaruh pada pengaturan itu.gsettings set org.gnome.settings-daemon.plugins.keyboard active false
sebagai pengguna sekali dan untuk semua, dan kemudian menggunakan skrip ini tanpagsettings set
perintah ...Saya punya masalah izin dengan skrip yang dijalankan oleh udev. Saya memutuskan dengan sudo sebagai berikut:
Atur peta keyboard untuk setiap perangkat
sumber
Anda juga dapat mendefinisikannya dalam file konfigurasi Xorg.
Itu diletakkan dalam jawaban stackexchange ini: /superuser//a/946575/437492
sumber
/etc/X11/xorg.conf.d/
(itu adalah tempat untuk pergi).