Mengapa file ~ / .Xmodmap saya tidak dimuat saat login?


16

Saya membuat ~/.Xmodmapfile berikut sesuai jawaban ini .

keysym Delete = Menu
keysym Menu = Delete

clear Lock
keycode 0x42 = Escape

Dengan kata lain, tukar Deletedan Menu, dan buat Caps Locktambahan Escape.

Lain kali saya masuk, Ubuntu bertanya apakah saya ingin memuat ~/.Xmodmapseperti yang diharapkan. Saya memuatnya, tetapi tidak ada yang terjadi (saat itu atau pada login berikutnya). Jika saya menjalankan secara manual xmodmap ~/.Xmodmap, ini berfungsi seperti yang diharapkan.

Saya tahu ini bekerja pada versi awal 10.10 beta, tetapi gagal pada pemasangan baru 10.10 saya. Saya belum mencoba sesuatu yang lebih awal dari 10,10. Ada ide?

Sunting: Saya memasukkan beberapa pernyataan debug /etc/gdm/Xsessionuntuk memastikan ~/.Xmodmapmemuat, dan semuanya secara ajaib mulai berfungsi. Saya tidak mengubah apa pun kecuali menambahkan beberapa gema, dan itu masih berfungsi sekarang setelah saya mengembalikan perubahan dan memulai kembali. Hal teraneh yang pernah saya lihat.

Satu hal yang saya sadari adalah bahwa "remap Caps Lock to Escape" dari Xmodmap selalu berfungsi. Hanya pertukaran Delete / Menu yang gagal. Saya akan membiarkan pertanyaan ini terbuka untuk saat ini jika ada orang lain yang memiliki masalah yang sama, karena saya tidak benar-benar tahu mengapa masalah itu berhenti.


Saya sendiri mengalami masalah yang sama, membuat saya gila. Jika saya mengetahui penyebabnya, saya pasti akan mengirim jawaban.
Jorge Israel Peña

Jawaban:


11

Saya tahu ini konyol, tetapi sebagai solusi Anda bisa memulai sendiri xmodmap ~/.Xmodmap .

Anda juga dapat memeriksa /etc/gdm/Xsessionbaris usermodmap="$HOME/.Xmodmap"dan jika tidak ada tambahkan saja di akhir file. Jika Anda adalah satu-satunya pengguna sistem, cukup masukkan perubahan Anda /etc/X11/Xmodmap.


2
Bagaimana perintah "autostart" Anda?
miguel.martin

Lihat Autostarting . Cara termudah mungkin adalah dengan hanya menambahkan entri Settings->Session and Startup, atau sesuatu di sepanjang baris itu.
Mateen Ulhaq

Atau misalnya, tambahkan ke shell Anda, jadi jika Anda sering membuka shell maka itu akan menjalankannya. Hal pertama yang saya lakukan ketika saya memasuki Gnome adalah membuka shell sebagian besar waktu, jadi itu adalah salah satu cara yang berhasil.
trusktr

3

Terlambat ke pesta, tapi ini membuatku gila juga; dan, keras kepala seperti saya, menyerah bukanlah pilihan.

Pada dasarnya ini yang saya coba, (sebagai pengguna saya, atau root jika perlu)

  • ~ / .Xmodmap saja
  • ~ / .xsession, ~ / .xsessionrc
  • ~ / .gnomerc
  • ~ / .xprofile
  • ~ / .xinitrc
  • /etc/X11/Xsession.d/myscript
  • /usr/share/X11/xorg.conf.d/ ( file konfigurasi, tidak menyentuhnya )

(Sebenarnya, menambahkan xmodmapperintah untuk ~/.bashrcbekerja, tetapi perlu memulai terminal setiap kali setelah login)

Beberapa tahun yang lalu (?), xkbDipilih untuk menangani pemetaan kunci dan konfigurasi (berinteraksi dengan X), tetapi xmodmapmungkin juga meminta perubahan terkait kunci ke X, setelahxkb melakukan tugasnya selama inisialisasi sesi X.

Masalahnya adalah kapan pengaturan xmodmap ini terjadi?
Ini tampaknya file-file di atas diproses terlalu dini dalam proses, dan baik X tidak siap untuk menerima xmodmap perubahan, atau xkb akan menimpa mereka.

Catatan: Saya menambahkan beberapa "pelacakan" ke file-file ini untuk memastikan mereka benar-benar berjalan pada suatu waktu!

Sebuah solusi yang sepertinya berhasil

Saya tidak ingin menambahkan .desktopfile pada awalnya (skrip satu baris sederhana harus cukup), tapi itu berhasil, jadi ini dia.
Solusi berasal dari Cara memetakan atau menukar tombol keyboard khusus di Linux? "solusi 1"

Pada dasarnya buat ~/.config/autostart/my-xmodmap.desktopfile, dan masukkan:

[Desktop Entry]
Name=MyXmodmap
Exec=/usr/bin/xmodmap /home/me/.Xmodmap
Terminal=false
Type=Application
X-GNOME-Autostart-enabled=true

ganti medengan nama pengguna Anda (perhatikan bahwa saya tidak repot-repot untuk mencoba ~/atau $HOMEyang mungkin berfungsi sama baiknya di tempat /home/me, dan path lengkap xmodmap kemungkinan tidak diperlukan ...), dan tambahkan bit exec

chmod +x ~/.config/autostart/my-xmodmap.desktop

Perintah xmodmap harus ada dalam ~/.Xmodmapfile dalam kasus ini (atau gunakan -eopsi, atau pilih nama file lain!). Logout dan kembali.

Perhatikan bahwa Anda dapat membuat program awal dari "Aplikasi Startup".

Solusi lain adalah dengan melupakan xmodmap dan belajar cara mengonfigurasi xkb!

Edit (lagi)

Kadang-kadang, mungkin 25% dari login, xmodmapmasih sepertinya tidak berfungsi - sementara perintah itu benar-benar dijalankan (pelacak membuktikan itu). Satu-satunya kesimpulan yang mungkin saya temui pada saat ini adalah bahwa xkbprosesnya berjalan terlambat dalam proses masuk, dan mungkin berakhir setelah xmodmapdijalankan. Sepertinya kondisi perlombaan ... Jadi, akhirnya, saya mengubah execbaris file desktop autostart ke

Exec=$HOME/bin/mystart &

(perhatikan &) mystartadalah skrip di direktori baru yang binsaya buat yang berisi

#!/bin/bash    
sleep 5
/usr/bin/xmodmap /home/me/.Xmodmap &
date >> /tmp/xmodmap-has-run

dan

chmod u+x ~/bin/mystart

Script tidur 5 detik sebelum menjalankan xmodmap, dan melacak ketika itu berjalan (dalam file /tmp/xmodmap-has-run).

Semoga itu saja!


Mengedit confituration xkb bekerja untuk saya: askubuntu.com/a/1090892/1021380
postrational


2

Mungkin Anda memiliki kesalahan sintaksis dalam ~/.Xmodmapfile Anda ?

Coba jalankan:

$ xmodmap ~/.Xmodmap

Itu harus memunculkan kesalahan jika ada.


0

Saya memiliki masalah aneh yang sama, mencoba memulai Xmodmap saya saat masuk dalam sesi saya (ubuntu 13.04). Saya akhirnya membuatnya bekerja dengan file .xinitrc di folder Home saya di mana saya meletakkan perintah saya, tetapi dengan jalur absolut untuk itu, yaitu:

/ usr / bin / xmodmap /home/MYNAME/.Xmodmap

Kemudian saya harus reboot (bukan hanya relog) sehingga akan dieksekusi.


2
Ini tidak berfungsi di bawah Ubuntu 14.04, untuk saya.
miguel.martin
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.