Xmodmap permanen di Ubuntu 13.04


72

Saya tidak dapat menjalankan xmodmap saat login di Ubuntu 13.04. Saya telah mencari-cari, termasuk di askubuntu dan semua jawaban yang saya temukan tidak berfungsi.

Saya memiliki file bernama .Xmodmap di folder rumah saya yang berisi pemetaan yang diinginkan. Jika saya menjalankannya secara manual itu berfungsi dengan baik, jadi tidak ada kesalahan di sana. Untuk membuatnya berjalan saat startup, saya telah mencoba:

  1. Menggunakan berbagai .xinitrcberisi salah satu dari perintah berikut:

    • xmodmap .Xmodmap
    • xmodmap ~/.Xmodmap
    • /usr/bin/xmodmap /home/NAME/.Xmodmap
    • if [ -s ~/.Xmodmap ]; then
      xmodmap ~/.Xmodmap
      fi
  2. Menggunakan .Xresourcesalih-alih .xinitrcdengan variasi yang sama.

  3. Mengaturnya sebagai aplikasi startup.

Tidak satu pun di atas berfungsi di Ubuntu 13.04 (64-bit) Saya juga melihat beberapa ide tentang mengubah pemetaan keyboard secara global, tetapi kebanyakan dari mereka tidak berlaku di Ubuntu 13.04 (yaitu file yang sesuai tidak ada di tempat yang ditentukan) dan saya lebih suka tidak menyentuh pengaturan global.

Jawaban:


81

Ubuntu tidak lagi menggunakan xmodmap, melainkan menggunakan xkb(sejauh yang saya mengerti, ini memfasilitasi tata letak keyboard per-jendela, antara lain).

File peta seluruh sistem ada di

/usr/share/X11/xkb/symbols/

Peta tampaknya dimuat secara hierarkis, dengan pcpeta sebagai root, dan bahasa apa pun (misalnya en) sebagai anak dari root.

Dalam kasus khusus saya, saya secara fisik bertukar Page Up dengan Home dan Page Down dengan End pada keyboard saya, jadi saya dengan sangat kasar membuat perubahan pada pcpeta seluruh sistem , sebagai berikut:

 key <HOME> {    [  Prior        ]   };
 key <PGUP> {    [  Home         ]   };
 key  <END> {    [  Next         ]   };
 key <PGDN> {    [  End          ]   };

CATATAN: Untuk memaksa Xorg menggunakan peta keyboard baru Anda, Anda mungkin harus menghapus peta yang sudah dikompilasi sebelumnya (* .xkm) di

/var/lib/xkb/

dan kemudian restart Xorg.

Ada berbagai sumber daya di xkb, tetapi yang ini terkait dengan Ubuntu.


9
Pada Ubuntu 14.04, sayangnya ini adalah cara termudah untuk bertukar kunci. Anda BISA membuat xmodmap berjalan saat login dengan menambahkannya ke Aplikasi Startup, tetapi jika Anda menangguhkan, hibernasi dll Anda harus secara manual memulai atau membuat skrip daemon startup.
holocronweaver

Aku bisa remap tombol tergantung pada pengubah: unmodified shift altgr* shift+altgr. Tapi bagaimana dengan left altdan super key?
Farzher

7
Saya pikir kalimat pertama Anda tidak benar. Apakah Anda punya sumber untuk itu? Saya merasa sulit untuk percaya bahwa "cara Ubuntu" dari memetakan kembali kunci Anda akan mengedit peta keyboard dari xkb. Selain samar, ini memiliki masalah bahwa peta khusus Anda dihapus ketika xkbdiperbarui.
Mateus Araújo

1
Yang mengatakan, ini adalah satu-satunya metode yang dapat diandalkan yang saya temukan dari memetakan kunci pada Ubuntu.
Mateus Araújo

1
Pasti ada cara yang lebih baik. Saya tahu kode kunci persis yang ingin saya petakan, tetapi kode kunci 217 bahkan tidak tercantum dalam xkb. Saya bahkan tidak melihat cara untuk menambahkan kode kunci baru.
Jonathan

13

Bagi saya, konfigurasi xkb terlalu rumit jika Anda ingin memetakan ulang 1 atau 2 kunci dengan cara yang tidak tersedia di Pengaturan Sistem. Plus, solusinya harus tetap di sisi pengguna, tanpa mengedit '/ usr / share / X11 / xkb / simbol /' dll. Memaksa beban 'xmodmap ~ / .Xmodmap' menggunakan Aplikasi Startup hanya berfungsi sampai Anda menangguhkan, mengubah pengguna atau ubah tata letak keyboard. Jadi, seperti yang disarankan holocronweaver, dengan potongan kode yang saya temukan, saya membuat skrip python untuk dimuat pada sesi startup, yang memuat ulang '~ / .Xmodmap' saat diperlukan.

Periksa laporan bug # 1243642 (komentar # 6), dan unduh di sini .


1
Masih bekerja pada 15.10 :-) Terima kasih!
lalomartins

Tautan ke skrip legendaris ini tampaknya rusak. Bisakah seseorang meletakkannya di github?
Epigene

Hebat - dan satu-satunya jawaban yang layak! Bekerja di 16.04. Untuk membuatnya berfungsi di Python3 diubah: "import gobject" to "dari gi.repository import GObject as gobject".
Craig Hicks

1
@Epigene - tautannya ada sekarang
Craig Hicks

Terpujilah! Seorang jenius bekerja di sekitar.
dmanexe

6

Saya mengalami masalah ini di Ubuntu 14.04, dan menemukan solusinya di sini . Rupanya, Ubuntu tidak dapat mengkonfigurasi keyboard segera setelah masuk, tetapi itu sedikit kemudian. Jadi, jika Anda menambahkan perintah

sleep 4 && xmodmap ~/.Xmodmap &

untuk ~/.bash_profileitu harus bekerja (itu untuk saya).

EDIT: Ini tampaknya berfungsi hanya setelah masuk, bukan setelah memulai. Saya harus menyelidiki ini nanti.


1
Adakah keberuntungan mengatur ini untuk dijalankan setelah menangguhkan / hibernasi?
Jonathan

Tidak, sayangnya saya masih tidak bisa bekerja setelah boot. Jadi setiap kali saya boot, saya membuka terminal dan mengetik xmodmap ~/.Xmodmap:(
dremodaris

Ketahuilah bahwa pada ubuntu 16.04 Anda harus menggunakan .profile
Vitor Abella

5

Konversi Caps Lockmenjadi Escuntuk vimdigunakan

Berikut ini adalah varian saya dari skrip startup pemetaan kunci. Itu dikonversi Caps Lockmenjadi Escpada keyboard apa pun untuk digunakan vi, vimatau gvim.

Berbeda dengan jawaban q4w56 , jawaban ini tidak menggunakan while; doloop tak terbatas . Kalau tidak, satu inti dari CPU dual core saya akan mencapai 42% setiap 5 detik, sangat mengurangi daya baterai laptop saya.

#!/usr/bin/env bash
sleep 4
xmodmap -e "clear Lock"
xmodmap -e "keysym Caps_Lock = Escape"

Simpan sebagai skrip. Jadikan file dapat dieksekusi dengan chmod +x. Tambahkan nama dan lokasi skrip ke Session and Startup → Application Autostart(dalam Xubuntu).

Perilaku keyboard untuk pengguna ini akan tetap bertahan melalui reboot dan logout, tetapi tidak ditangguhkan. Kegigihan melalui penundaan dapat dicapai , tetapi sayangnya hanya di tingkat sistem, tidak siap di tingkat pengguna.

Dasar pemikiran untuk memetakan kembali keyboard ini

Dalam dunia komputasi saat ini hanya ada sedikit penggunaan yang tersisa untuk Caps Lockkuncinya. Secara umum, seseorang harus menahan diri dari menggunakan SEMUA CAPS berdasarkan netiket dan pemisahan presentasi dan konten . Selain itu, secara tidak sengaja menekan Caps Locktombol sementara mengedit teks dengan vimtidak selalu langsung dicatat, tetapi selalu menghasilkan perilaku yang agak menggangguvim lebih lanjut. Menonaktifkan Caps Lockkunci bersama-sama dan menggunakan ulang sebagai Esckunci untuk mencapai hasil kunci dalam kemenangan ganda untuk vimdigunakan.


Mengganti fungsi Caps Locktombol mungkin merupakan penghemat kehidupan nyata bagi vimpengguna di Apple MacBooks tanpa Esckunci .
Serge Stroobandt

3
Lebih baik untuk memetakan capslockke ctrl. Ini memecahkan lebih banyak masalah, dan di Vim, maka, Anda dapat menggunakan capslock+ [untuk EscMaaf untuk campur tangan, tetapi saya merasa berkewajiban untuk menyarankan ini.
user907860

Apa yang sebenarnya ditangguhkan? Apakah itu menutup penutup pada laptop Anda? Setelah itu solusi Anda tidak berfungsi? Bagaimana Anda menggunakan vim setelah Anda menutup penutup pada laptop Anda?
Marko Avlijaš

@ MarkoAvlijaš How do you use vim after you close the lid on your laptop?Dengan membuka tutupnya tentu saja!
Serge Stroobandt

Haha, saya tidak akan pernah menebaknya. Maksud saya caps lock tidak dipetakan untuk dikawal lagi setelah itu?
Marko Avlijaš

3

Saya punya masalah juga di Ubuntu 16.04 dengan fcitx, dan punya solusi pada fcitx wiki , tetapi perlu fcitx memiliki 4.2.7 atau lebih baru

  • touch ~/.Xmodmap
  • tulis konfigurasi
  • reboot dan fcitx akan mencoba memuatnya secara otomatis

Ada juga yang punya alasan.


1
Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
Videonauth

@Videonauth Saya telah mengubah jawaban saya
Bluethon

Terima kasih banyak :) Saya meninggalkan komentar saya di sini sehingga orang-orang yang ada di daftar petunjuk dapat melihat Anda mengubah sesuatu.
Videonauth

@ Videoonauth ini adalah jawaban pertama saya dan saya tidak bisa berbahasa Inggris, jadi saya membuat beberapa kesalahan. dan terima kasih atas saran Anda. : P
Bluethon

Sama-sama. Memberikan jawaban adalah cara yang baik untuk berkontribusi pada komunitas.
Videonauth

3

@ Jawaban Daniel menunjuk saya ke arah yang benar, tetapi saya ingin memperpanjangnya.

Bekerja untuk saya di Linux Mint 17.2 dan Ubuntu 16.04.

Saya mencoba semua tikungan yang bisa saya pikirkan untuk tetap digunakan xmodmap, tetapi semuanya gagal ketika sistem beralih ke mode tidur. Hal yang sama berlaku untuk skrip start-aplikasi yang digunakan setxkbmapdalam kasus di mana * pengaturan-daemon (bagi saya itu xfce4) berjalan lebih lambat dari skrip --- dan ketertiban tidak dapat benar-benar dipengaruhi.

Apa yang akhirnya saya dapatkan memiliki bahan-bahan berikut:

1) Tulis file pemetaan keyboard minimal untuk /usr/share/X11/xkb/symbols. Mari kita panggil file mylayoutitu bisa sesederhana

xkb_symbols "basic" {
  name[Group1] = "My Layout";
  include "us"
  key <AE03> { [ 3, numbersign, sterling, sterling] };
  include "level3(ralt_switch)"
}
  • basic hanya sebuah nama, kita akan bertemu lagi nanti.
  • The name[Group1]sama hanya nama tampaknya, tetapi akan memainkan peran kemudian.
  • include "us"termasuk keyboard us polos. Sebenarnya usadalah file lain di direktori yang sama. Ini adalah tata letak keyboard yang kami beradaptasi. Pilih yang berbeda sesuai kebutuhan. Catatan: tidak ada titik koma untuk mengakhiri baris ini.
  • The keyline adalah salah satu adaptasi dari keyboard, lebih dapat mengikuti. The <AE03>dapat ditemukan di file di bawah /usr/share/X11/xkb/keycodes. Gunakan xevprogram untuk mengetahui bahwa "3" -kunci memiliki kode kunci 12 dan dalam file kode kunci Xfree86itu dipetakan ke <AE03>.
  • Akhirnya includearahan lain untuk mengaktifkan opsi keyboard lain, dalam hal ini saya ingin memiliki tombol Alt yang tepat untuk menjadi tombol shift level-3, yaitu tombol yang memberikan akses ke sterlingtanda yang saya tetapkan di atas. level3hanya nama file dalam folder yang sama dengan ralt_switchsatu bagiannya. Lihatlah sekeliling dan pilih apa yang perlu Anda sertakan.

2) Saya tidak memasukkan mylayoutke dalam folder sistem. Sebaliknya saya hanya membuat tautan lunak dari folder sistem ke folder yang saya sukai untuk segera melihat bahwa ini bukan perangkat lunak stok.

3) Selanjutnya saya tidak memperbaiki evdev.xml, lagi untuk mencegah kerepotan pembaruan. Tetapi ini akan diperlukan untuk menemukan mylayout di editor konfigurasi keyboard (untuk xfce4 itu xfce4-keyboard-settings). Sebaliknya saya menggunakan xfce4-settings-editordan mengubah keyboard-layout->XkbLayoutke mylayout(nama file) dan XkbVariantke basic(lihat di atas). Setelah itu, mylayout/basicditampilkan di editor pengaturan keyboard juga. Entri masuk evdev.xmltampaknya hanya diperlukan untuk dapat memilih tata letak.

Dengan cara ini, pengaturan keyboard sekarang bertahan dari mode tidur dan reboot.

Lebih banyak latar belakang dapat ditemukan di sini: http://www.charvolant.org/~doug/xkb/html/node5.html .

Pendekatan lain untuk memperbaiki masalah mode tidur (tidak mencoba sendiri), dapat ditemukan di sini: https://www.vinc17.net/unix/xkb.en.html .

UPDATE: bekerja dengan Mint 18.3 saat yang sama saya mengubah pengaturan di xfce4-settings-editor seperti dijelaskan di atas.

UPDATE: Dengan 18,04, gdm3 sebagai manajer tampilan dan XFCE4 sebagai manajer jendela, sepertinya ~ / .Xmodmap dibaca lagi dan pengaturan tampaknya bertahan dari penundaan. (Saya jarang menggunakan suspend dan saya tidak pernah yakin dengan mode mana laptop itu benar-benar ada.)


2

REVISI

Pembaruan di awal 2018 memecah kegigihan - auto-reload keymap setelah ditangguhkan atau hibernasi. Karena metode yang menggunakan skrip /etc/pm/sleep.d berhenti bekerja (tidak digunakan lagi?), Yang hanya menyisakan cara yang lebih baru, menggunakan / lib / systemd / system-sleep dan skrip yang sedikit berbeda (yang mulai bekerja pada keymaps!).

Jadi posting ini diperbarui ke metode yang lebih baru untuk ketekunan, dan untuk memasukkan pemuatan keymap awal normal, yang juga mulai berfungsi. Rutin untuk mengonversi file .Xmodmap ke .xkbmap tetap tidak berubah.

Perhatikan ini adalah solusi per pengguna. Untuk jawaban per perangkat, lihat cara menerapkan peta tombol ke satu perangkat . Metode ini dapat disesuaikan untuk digunakan di sini.

Pertama-tama, modifikasi file .Xmodmap sesuai keinginan. Ini lebih mudah untuk diedit secara langsung daripada file .xkbmap. Saat dimuat:

xmodmap .Xmodmap

lalu konversikan ke file .xkb:

xkbcomp $ DISPLAY $ HOME / .xkbmap

Untuk memuat secara otomatis saat startup, buka Aplikasi Startup, klik Tambah, dan pada baris Perintah masukkan:

xkbcomp /home/user/.xkbmap ": 0"

("pengguna" diganti dengan nama pengguna yang sebenarnya.) Untuk Nama, mungkin masukkan Load Keyboard Map. Tambahkan komentar jika diinginkan dan tekan Simpan.

Keymap sekarang akan memuat setiap kali sistem melakukan boot, tetapi tidak akan selamat dari penundaan atau hibernasi. Untuk ini, buat file baru di / lib / systemd / system-sleep, mungkin bernama 60_xkbmap, yang berisi:

#!/bin/sh
case $1/$2 in
  pre/*)
    # Place pre-suspend commands here
    exit 0
    ;;
  post/*)
    # Place post-suspend commands here
    export DISPLAY=":0"
    export XAUTHORITY="/home/user/.Xauthority"
    su user -c "xkbcomp /home/user/.xkb/xkb-map $DISPLAY 2>/dev/null"
    ;;
esac

( Ref. ) Seperti di atas, ganti "pengguna" dengan nama pengguna sebenarnya.

Keymap sekarang harus memuat secara otomatis dan tetap bertahan. catatan:

  • Berlaku untuk rilis LTS saat ini, 16,04, dan kemungkinan yang lebih baru juga.
  • Diambil dari pos 14 dari utas terkait-bug di atas.
  • Komentar sebelumnya diterapkan pada posting asli.

Saya mencoba metode ini sekarang dan sekarang ketika saya memulai terminal saya mendapatkan banyak pesan seperti: Peringatan: Tidak ada simbol yang ditentukan untuk <AB11> (kode 97) Peringatan: Tidak ada simbol yang ditentukan untuk <JPCM> (kode kunci 103) Peringatan: Tidak ada simbol yang ditentukan untuk <I120> (kode kunci 120) ...... banyak lagi yang tidak yakin apa akibatnya. Adakah yang tahu
Bayi yang hilang

Metode ini meskipun peringatan yang disebutkan di atas berfungsi tetapi hanya sementara - setelah beberapa saat pemetaan entah bagaimana terlupakan dan tombol super kembali ke fungsi default. Jadi saya akan mencobanya sebaliknya - saya akan memetakan ulang cara pintas sunting dasar pada mac saya untuk menggunakan tombol Kontrol, bukan tombol Command dan melihat apakah itu berfungsi. Saya hanya ingin perintah cut-copy-paste-undo-redo saya sama di Mac dan Ubuntu. Saya menjadi sangat frustrasi ketika menu pencarian muncul di Ubuntu setiap kali saya mencoba untuk menyalin atau menempelkan sesuatu.
Bayi yang hilang

1

Ini membuat saya tersandung juga, ketika saya memutakhirkan dari Ubuntu 12,04 ke 13,04.

Untungnya pengaturan ini sekarang (atau mungkin selalu) mudah diakses di preferensi Keyboard dan dapat diubah dengan beberapa klik mouse.

  1. Buka Pengaturan Sistem > Tata Letak Keyboard > Opsi ...
  2. Di Opsi Tata Letak Papan Ketik, klik panah untuk mengungkapkan opsi posisi kunci key Ctrl .
  3. Masukkan tanda centang di di Swap Ctrl dan Caps Lock .

Ini dia: Kontrol Kiri dan Caps Lock telah mengubah posisi.

Jangan lupa menghapus ~/.Xmodmapsetelah Anda melakukan perubahan.


Ini mungkin diturunkan karena tidak membahas xmodmap, tapi ini sebenarnya bagaimana saya menemukan bahwa menggunakan Gnome Tweak mungkin menjadi alasan beberapa pemetaan saya bertingkah aneh.
dragon788

Saya tidak melihat ini di 16.04, apakah ini masih mungkin?
chrismarx

1
@ chrismarx Tidak, mereka menghapusnya. Saat ini (16,04) saya mulai XKBOPTIONS="ctrl:swapcaps"masuk /etc/default/keyboard.
glts

0

Saya merasa menambahkan skrip ini ke startup memuaskan:

while true;do 
    xmodmap -e "keycode 87=Prior"
    xmodmap -e "keycode 88=Next"
    sleep 5
done

Saya mencoba menggunakan xmodmap ./Xmodmap, tetapi setiap kali dieksekusi, kelambatan yang nyata akan terjadi.


4
Penggunaan while; doloop tak terbatas harus dihindari. Ini menyebabkan satu inti dari CPU dual core saya mencapai 42% setiap 5 detik, sangat mengurangi daya baterai laptop saya!
Serge Stroobandt
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.