web-dev-qa-db-ja.com

ログイン時に〜/ .Xmodmapファイルが読み込まれないのはなぜですか?

この回答 に従って、次の~/.Xmodmapファイルを作成しました。

keysym Delete = Menu
keysym Menu = Delete

clear Lock
keycode 0x42 = Escape

つまり、DeleteMenuを交換し、Caps Lockを追加のEscapeにします。

次回ログインすると、Ubuntuは~/.Xmodmapを期待どおりにロードするかどうかを尋ねてきました。私はそれをロードしましたが、何も起こりませんでした(その時も、その後のログインでも)。 xmodmap ~/.Xmodmapを手動で実行すると、期待どおりに動作します。

これは10.10ベータの初期に機能したことは知っていますが、10.10の新規インストールでは失敗しています。私は10.10より前のものには試していません。何か案は?

編集:/etc/gdm/Xsessionにいくつかのデバッグステートメントを挿入して、~/.Xmodmapがロードされていることを確認し、すべてが魔法のように動作し始めました。エコーを追加する以外は何も変更しませんでしたが、変更を元に戻して再起動したので、今でも機能しています。私が今まで見た中で奇妙なこと。

私が気づいたことの1つは、Xmodmapの「Caps Lock to Escape」の部分が常に機能していたことです。失敗したのは、削除/メニュースワップだけでした。問題が停止した理由が実際にはわからないため、他の誰かが同じ問題を抱えている場合に備えて、この質問は今のところ公開しておきます。

15
Matthew

私はそれがばかげていることを知っていますが、回避策としてあなたはただxmodmap ~/.Xmodmapを自動起動することができます。

また、/etc/gdm/Xsession行のusermodmap="$HOME/.Xmodmap"を確認し、ない場合はファイルの最後に追加します。システムの唯一のユーザーである場合は、変更を/etc/X11/Xmodmapに入れるだけです。

10
turbo

おそらく~/.Xmodmapファイルに構文エラーがありますか?

実行してみてください:

$ xmodmap ~/.Xmodmap

エラーがある場合はエラーが発生します。

2
gpmcadam

パーティーに遅刻したが、これは私にも夢中になった。そして、私と同じように頑固ですが、あきらめることは選択肢ではありませんでした。

基本的にこれは私が試したものです(私のユーザー、または必要に応じてrootとして)

  • 〜/ .Xmodmapのみ
  • 〜/ .xsession、〜/ .xsessionrc
  • 〜/ .gnomerc
  • 〜/ .xprofile
  • 〜/ .xinitrc
  • /etc/X11/Xsession.d/myscript
  • /usr/share/X11/xorg.conf.d/(configファイル、触れなかった

(実際には、xmodmapコマンドを~/.bashrcに追加しても機能しましたが、ログイン後に毎回端末を起動する必要があります)

数年前(?)、xkbはキーのマッピングと構成(Xとのインターフェース)を処理するために選択されましたが、xmodmapxkbの後にキー関連の変更を要求することもありますXセッションの初期化中の動作。

問題は、これらのxmodmap設定がいつ発生するかです。
Itseems上記のファイルは処理の早い段階で処理され、Xはxmodmapの変更を受け入れる準備ができていないか、xkbがそれらを上書きします。

注:これらのファイルに実際に実行されていることを確認するために、これらのファイルに「追跡」を追加しました。

動作しているように見えるソリューション

最初は.desktopファイルを追加するつもりはありませんでした(単純な1行のスクリプトで十分でした)が、それで機能するので、ここにあります。
ソリューションは、 Linuxで特別なキーボードキーを再マップまたは交換する方法 "ソリューション1"

基本的に~/.config/autostart/my-xmodmap.desktopファイルを作成し、そこに入れます:

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

meをユーザー名に置き換えます(~/の代わりに同等に機能する$HOMEまたは/home/meとxmodmapのフルパスを試してみませんでした)おそらく必要ありません...)、およびexecビットを追加します

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

この場合、xmodmapコマンドは~/.Xmodmapファイルにある必要があります(または-eオプションを使用するか、別のファイル名を選択してください!)。ログアウトして再度ログインします。

「起動アプリケーション」から起動プログラムを作成する場合があることに注意してください。

もう1つの解決策は、xmodmapを忘れてxkb!を構成する方法を学ぶことです。

編集(もう一度)

時々、おそらくログオンの25%で、xmodmapはまだ機能していないように見えます-コマンドが実際に実行されている間(トラッカーがそれを証明します)。現時点で私が思いつく唯一の結論は、xkbプロセスはログオンプロセスの後半で実行され、xmodmapの実行後に終了する可能性があるということです。競合状態のように見えます...それで、最後に、自動開始デスクトップファイルexec行を

Exec=$HOME/bin/mystart &

&に注意)mystartは新しいディレクトリにあるスクリプトですbinは、

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

そして

chmod u+x ~/bin/mystart

スクリプトは、xmodmapを実行する5秒前にスリープし、いつ実行されたかを追跡します(ファイル/tmp/xmodmap-has-run内)。

うまくいけばそれですべてです!

2
Ring Ø

ここに、おそらくより良い答えがあります: http://cweiske.de/howto/xmodmap/ar01s06.html

あなたはあなたのために働くためにそれを少し微調整する必要があるかもしれませんが、指示はすべてそこにあります。

2

私は同じ奇妙な問題を抱えていました。セッションにログインしているときにXmodmapを起動しようとしました(ubuntu 13.04)。最終的に、コマンドを置くホームフォルダー内の.xinitrcファイルで動作するようになりましたが、それへの絶対パスは次のとおりです。

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

その後、再実行するだけでなく、再起動する必要がありました。

0
greguti