Ubuntu 13.04でログイン時にxmodmapを実行できません。私はaskubuntuを含め検索しましたが、見つかったすべての回答が機能しません。
ホームフォルダーに.Xmodmapという名前のファイルがあり、目的のマッピングが含まれています。手動で実行すると正常に動作するため、エラーはありません。起動時に実行するために、私は試しました:
次のコマンドのいずれかを含むさまざまな.xinitrc
を使用します。
xmodmap .Xmodmap
xmodmap ~/.Xmodmap
/usr/bin/xmodmap /home/NAME/.Xmodmap
if [ -s ~/.Xmodmap ]; then
xmodmap ~/.Xmodmap
fi
.Xresources
の代わりに.xinitrc
を同じバリエーションで使用します。
スタートアップアプリケーションとして設定します。
上記のいずれもUbuntu 13.04(64ビット)では機能しません。また、キーボードマッピングをグローバルに変更することについていくつかのアイデアを見ましたが、それらのほとんどはUbuntu 13.04には適用されませんでした(つまり、指定された場所に対応するファイルが存在しませんでした)。とにかくグローバル設定に触れないことを好みます。
Ubuntuはxmodmap
を使用しなくなりましたが、代わりにxkb
を使用します(私が理解している限り、これによりウィンドウごとのキーボードレイアウトが容易になります)。
システム全体のマップファイルは
/usr/share/X11/xkb/symbols/
マップは、pc
マップをルートとして、どの言語(たとえば、en
)をルートの子として、階層的に読み込まれているように見えます。
私の特定のケースでは、キーボードで物理的にPage UpとEndでPage Downを交換したため、次のようにシステム全体のpc
マップを非常に粗く変更しました。
key <HOME> { [ Prior ] };
key <PGUP> { [ Home ] };
key <END> { [ Next ] };
key <PGDN> { [ End ] };
注:Xorgに新しいキーボードマップの使用を強制するには、 既存のプリコンパイル済みマップを削除 (* .xkm)in
/var/lib/xkb/
その後、Xorgを再起動します。
xkb
にはさまざまなリソースがありますが、 this one はUbuntuに関連しています。
私にとっては、システム設定で使用できない方法で1つまたは2つのキーを再マップする場合、xkb構成は複雑すぎます。さらに、「/ usr/share/X11/xkb/symbols /」などを編集せずに、ソリューションをユーザー側に残しておく必要があります。スタートアップアプリケーションを使用して「xmodmap〜/ .Xmodmap」のロードを強制するのは、ユーザーを一時停止、変更するまでのみですまたは、キーボードレイアウトを変更します。そこで、holocronweaverが示唆するように、私が見つけたコードスニペットを使用して、必要に応じて '〜/ .Xmodmap'を再ロードする、セッション開始時にロードされるpythonスクリプトを作成しました。
バグレポート#1243642 (コメント#6)、および ここからダウンロード を確認してください。
Ubuntu 14.04でこの問題が発生し、解決策が見つかりました here 。どうやら、Ubuntuはログイン後すぐにキーボードを設定することはできませんが、少し遅れています。コマンドを追加すると
sleep 4 && xmodmap ~/.Xmodmap &
~/.bash_profile
にすると、動作するはずです(私にとってはうまくいきます)。
編集:これは、起動後にではなく、ログイン後にのみ機能するようです。これについては後で調査する必要があります。
vim
を使用ここに、キーマッピングスタートアップスクリプトの私のバリアントがあります。変換する Caps Lock に Esc vi
、vim
、またはgvim
で使用するキーボード。
q4w56 の答えとは異なり、この答えは無限のwhile; do
ループを使用しません。そうしないと、デュアルコアCPUの1つのコアが5秒ごとに42%に達し、ラップトップのバッテリーの充電が大幅に減少します。
#!/usr/bin/env bash
sleep 4
xmodmap -e "clear Lock"
xmodmap -e "keysym Caps_Lock = Escape"
スクリプトとして保存します。 chmod +x
でファイルを実行可能にします。スクリプト名と場所をSession and Startup → Application Autostart
(Xubuntu内)に追加します。
このユーザーのキーボードの動作は、再起動およびログアウト後も維持されますが、中断されません。 サスペンドによる持続性を実現できます 。ただし、残念なことにユーザーレベルではなく、システムレベルでのみです。
今日のコンピューティングの世界では、ほとんど使用されていません Caps Lock キー。一般的に、 netiquette と プレゼンテーションとコンテンツの分離 の両方のおかげで、 ALL CAPS の使用は控えるべきです。また、誤って Caps Lock vim
を使用してテキストを編集している間のキーは、常にすぐに記録されるわけではありませんが、常に迷惑なvim
動作になります。無効化 Caps Lock キーをすべてまとめて、簡単に届くように再利用する Esc キーを使用すると、vim
を2回使用できます。
@ダニエルの答えは私に正しい方法を示したが、私はそれを拡張したいと思います。
Linux Mint 17.2およびUbuntu 16.04で動作します。
xmodmap
を使い続けるために考えられるすべてのひねりを試みましたが、システムがスリープモードになるとすべて失敗します。同じことは、* settings-daemon(私にとってはxfce4)がスクリプトよりも遅く実行される場合にsetxkbmap
を使用する起動アプリケーションスクリプトにも当てはまります。順序は実際には影響を受けません。
私がついに思いついたものには、次の成分があります。
1)/usr/share/X11/xkb/symbols
の最小限のキーボードマッピングファイルを作成します。ファイルmylayout
を呼び出しましょう。
xkb_symbols "basic" {
name[Group1] = "My Layout";
include "us"
key <AE03> { [ 3, numbersign, sterling, sterling] };
include "level3(ralt_switch)"
}
basic
は単なる名前です。後でまた会いましょう。name[Group1]
も同様の名前にすぎませんが、後で機能することはありません。include "us"
にはプレーンusキーボードが含まれます。実際、us
は同じディレクトリ内の別のファイルです。これが私たちが適応しているキーボードのレイアウトです。必要に応じて別のものを選択してください。注:この行を終了するセミコロンはありません。key
行はキーボードの適応の1つであり、これに続くことができます。 <AE03>
は、/usr/share/X11/xkb/keycodes
の下のファイルにあります。 xev
プログラムを使用して、「3」キーにキーコード12があり、キーコードファイルXfree86
で<AE03>
にマップされていることを確認します。include
ディレクティブ。この場合、レベル3シフトキー、つまりsterling
sign Iへのアクセスを許可するキーを右Altキーにしたい上記で定義されています。 level3
は、ralt_switch
の1つのセクションを持つ同じフォルダー内の単なるファイル名です。周りを見て、含める必要があるものを選択します。2)しましたnotmylayout
をシステムフォルダーに入れました。むしろ、システムフォルダから自分の好みのフォルダへのソフトリンクのみを作成して、これがストックソフトウェアではないことをすぐに確認しました。
3)さらに、私はnotを修正しましたevdev.xml
を修正し、再び更新の手間を防ぎます。ただし、これはキーボード構成エディターでmylayoutを見つけるために必要です(xfce4の場合はxfce4-keyboard-settings
です)。代わりに、xfce4-settings-editor
を使用し、keyboard-layout->XkbLayout
をmylayout
(ファイル名)に変更し、XkbVariant
をbasic
に変更しました(上記を参照)。その後、mylayout/basic
がキーボード設定エディターにも表示されます。 evdev.xml
のエントリは、レイアウトを選択するためにのみ必要なようです。
このようにして、キーボード設定はスリープモードとリブートを維持します。
詳細な背景についてはこちらをご覧ください: http://www.charvolant.org/~doug/xkb/html/node5.html .
スリープモードの問題を修正する別の方法(自分では試していません)は、ここで見つけることができます: https://www.vinc17.net/unix/xkb.en.html .
更新:上記のようにxfce4-settings-editorの設定を変更したのと同じ瞬間にMint 18.3で動作しました。
更新:18.04では、gdm3がディスプレイマネージャー、XFCE4がウィンドウマネージャーとして、〜/ .Xmodmapが再度読み取られ、設定seemサスペンドを生き残るために。 (サスペンドを使用することはめったになく、実際にラップトップがどのモードになっているかはわかりません。)
Fcitxを使用したUbuntu 16.04でも問題が発生し、 fcitx wiki で解決策がありましたが、fcitxには4.2.7以降が必要です
touch ~/.Xmodmap
理由の説明もあります。
リビジョン
2018年初頭の更新により永続性が破られました-サスペンドまたはハイバネート後のキーマップの自動リロード。 /etc/pm/sleep.dスクリプトを使用するメソッドは動作を停止したため(廃止されましたか?)、/ lib/systemd/system-sleepとわずかに異なるスクリプト(キーマップで動作を開始しました!).
そのため、この投稿は永続化のための新しいメソッドに更新され、通常のキーマップの初期ロードも含まれるようになりました。これも機能し始めました。 .Xmodmapファイルを.xkbmapに変換するためのルーチンは変更されません。
これはユーザーごとのソリューションであることに注意してください。デバイスごとの回答については、「 キーマップを単一のデバイスに適用する方法 」を参照してください。このメソッドは、ここでの使用に適合させることができます。
最初に、必要に応じて.Xmodmapファイルを変更します。これらは、.xkbmapファイルよりも直接編集する方が簡単です。ロードされるとき:
xmodmap .Xmodmap
次に、.xkbファイルに変換します。
xkbcomp $ DISPLAY $ HOME/.xkbmap
起動時に自動ロードするには、スタートアップアプリケーションを開いて[追加]をクリックし、コマンドラインで次のように入力します。
xkbcomp /home/user/.xkbmap ":0"
(「ユーザー」は実際のユーザー名に置き換えられます。)「名前」には、「キーボードマップの読み込み」と入力します。必要に応じてコメントを追加し、保存をクリックします。
これで、システムが起動するたびにキーマップがロードされますが、サスペンドまたは休止状態に耐えることはできません。このため、/ lib/systemd/system-sleepに、おそらく60_xkbmapという名前の新しいファイルを作成します。
#!/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。 )上記のように、「user」を実際のユーザー名に置き換えます。
これで、キーマップは自動ロードされ、永続的なままになります。注意:
これにより、Ubuntu 12.04から13.04にアップグレードしたときにもつまずきました。
幸いなことに、この設定はキーボード設定で簡単にアクセスできるようになりました(または、常にアクセスできていました)。マウスを数回クリックするだけで変更できます。
どうぞ。左コントロールとCaps Lockの位置が切り替わりました。
変更を行ったら、~/.Xmodmap
を削除することを忘れないでください。
私はこのスクリプトをスタートアップに追加すると満足しています:
while true;do
xmodmap -e "keycode 87=Prior"
xmodmap -e "keycode 88=Next"
sleep 5
done
xmodmap ./Xmodmap
を使用してみましたが、実行するたびに顕著な遅延が発生します。