web-dev-qa-db-ja.com

Ubuntu 13.04の永続的なxmodmap

Ubuntu 13.04でログイン時にxmodmapを実行できません。私はaskubuntuを含め検索しましたが、見つかったすべての回答が機能しません。

ホームフォルダーに.Xmodmapという名前のファイルがあり、目的のマッピングが含まれています。手動で実行すると正常に動作するため、エラーはありません。起動時に実行するために、私は試しました:

  1. 次のコマンドのいずれかを含むさまざまな.xinitrcを使用します。

    • xmodmap .Xmodmap
    • xmodmap ~/.Xmodmap
    • /usr/bin/xmodmap /home/NAME/.Xmodmap
    • if [ -s ~/.Xmodmap ]; then
      xmodmap ~/.Xmodmap
      fi
  2. .Xresourcesの代わりに.xinitrcを同じバリエーションで使用します。

  3. スタートアップアプリケーションとして設定します。

上記のいずれもUbuntu 13.04(64ビット)では機能しません。また、キーボードマッピングをグローバルに変更することについていくつかのアイデアを見ましたが、それらのほとんどはUbuntu 13.04には適用されませんでした(つまり、指定された場所に対応するファイルが存在しませんでした)。とにかくグローバル設定に触れないことを好みます。

71

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に関連しています。

80
Daniel

私にとっては、システム設定で使用できない方法で1つまたは2つのキーを再マップする場合、xkb構成は複雑すぎます。さらに、「/ usr/share/X11/xkb/symbols /」などを編集せずに、ソリューションをユーザー側に残しておく必要があります。スタートアップアプリケーションを使用して「xmodmap〜/ .Xmodmap」のロードを強制するのは、ユーザーを一時停止、変更するまでのみですまたは、キーボードレイアウトを変更します。そこで、holocronweaverが示唆するように、私が見つけたコードスニペットを使用して、必要に応じて '〜/ .Xmodmap'を再ロードする、セッション開始時にロードされるpythonスクリプトを作成しました。

バグレポート#1243642 (コメント#6)、および ここからダウンロード を確認してください。

12
dedalu

Ubuntu 14.04でこの問題が発生し、解決策が見つかりました here 。どうやら、Ubuntuはログイン後すぐにキーボードを設定することはできませんが、少し遅れています。コマンドを追加すると

sleep 4 && xmodmap ~/.Xmodmap &

~/.bash_profileにすると、動作するはずです(私にとってはうまくいきます)。

編集:これは、起動後にではなく、ログイン後にのみ機能するようです。これについては後で調査する必要があります。

6
dremodaris

変換する Caps Lock に Esc vimを使用

ここに、キーマッピングスタートアップスクリプトの私のバリアントがあります。変換する Caps Lock に Esc vivim、または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回使用できます。

5

@ダニエルの答えは私に正しい方法を示したが、私はそれを拡張したいと思います。

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->XkbLayoutmylayout(ファイル名)に変更し、XkbVariantbasicに変更しました(上記を参照)。その後、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サスペンドを生き残るために。 (サスペンドを使用することはめったになく、実際にラップトップがどのモードになっているかはわかりません。)

3
Harald

Fcitxを使用したUbuntu 16.04でも問題が発生し、 fcitx wiki で解決策がありましたが、fcitxには4.2.7以降が必要です

  • touch ~/.Xmodmap
  • 設定を書く
  • 再起動すると、fcitxは自動的にロードしようとします

理由の説明もあります。

3
Bluethon

リビジョン

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」を実際のユーザー名に置き換えます。

これで、キーマップは自動ロードされ、永続的なままになります。注意:

  • 現在のLTSリリース16.04、およびおそらくそれ以降のリリースにも適用されます。
  • 上記のバグスレッドの post 14 から取得。
  • 以前のコメントが元の投稿に適用されました。
2
u2n

これにより、Ubuntu 12.04から13.04にアップグレードしたときにもつまずきました。

幸いなことに、この設定はキーボード設定で簡単にアクセスできるようになりました(または、常にアクセスできていました)。マウスを数回クリックするだけで変更できます。

  1. システム設定> キーボードレイアウト> オプション...
  2. [キーボードレイアウトオプション]で、矢印をクリックして▸Ctrlキーの位置オプションを表示します。
  3. スワップCtrlとCaps Lockにチェックマークを入れます。

どうぞ。左コントロールとCaps Lockの位置が切り替わりました。

変更を行ったら、~/.Xmodmapを削除することを忘れないでください。

1
glts

私はこのスクリプトをスタートアップに追加すると満足しています:

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

xmodmap ./Xmodmapを使用してみましたが、実行するたびに顕著な遅延が発生します。

0
golopot