Ubuntu 13.04の永続的なxmodmap


72

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には適用されません(つまり、指定された場所に対応するファイルが存在しませんでした)。

回答:


81

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)を削除する必要がある場合があります

/var/lib/xkb/

その後、Xorgを再起動します。

にはさまざまなリソースがありますがxkbこれはUbuntuに関連しています。


9
Ubuntu 14.04の時点で、これは悲しいことにキーを交換する最も簡単な方法です。ログイン時にxmodmapを起動アプリケーションに追加することで実行できますが、一時停止、休止状態などを行う場合は、手動で起動するか、起動デーモンスクリプトを作成する必要があります。
holocronweaver 14年

修飾子に応じてキーを再マッピングできますunmodified shift altgr* shift+altgr。しかし、何についてleft altsuper key
ファーザー14

7
あなたの最初の文が真実だとは思わない。ソースはありますか?キーをリマップする「Ubuntuの方法」がからキーボードマップを編集することになるとは信じがたいxkbです。暗号化されていることに加えて、これにxkbは更新時にカスタムマップが削除されるという問題があります。
マテウスアラウージョ14年

1
そうは言っても、これは、Ubuntuでキーを再マップする際に見つけた唯一の信頼できる方法です。
マテウスアラウージョ14年

1
もっと良い方法があるはずです。マッピングしたい正確なキーコードは知っていますが、キーコード217はxkbにもリストされていません。新しいキーコードを追加する方法さえ見当たりません。
ジョナサン14

13

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

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


1
15.10の時点でまだ動作しています:-)ありがとう!
-lalomartins

この伝説的なスクリプトへのリンクは壊れているようです。誰かがgithubにそれを置くことができますか?
エピジーン

素晴らしい-そして唯一の実行可能な答え!16.04での作業。Python3で動作させるには、「gobjectをインポート」から「gi.repositoryからGObjectをGObjectとしてインポート」に変更しました。
クレイグヒックス

1
@Epigene-リンクは現在あります
クレイグヒックス

ほめなさい!天才が回避します。
dmanexe

6

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

sleep 4 && xmodmap ~/.Xmodmap &

するために~/.bash_profileそれは(それが私のために行います)動作するはずです。

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


1
これをサスペンド/ハイバネート後に実行するように設定する運はありますか?
ジョナサン14

いいえ、残念ながら、起動後も動作させることはできません。したがって、起動するたびに、ターミナルを開いて次のように入力します。xmodmap ~/.Xmodmap
dremodaris 14

ubuntu 16.04では、.profile
Vitor Abella

5

使用Caps LockするEscために変換vimする

ここに、キーマッピングスタートアップスクリプトの私のバリアントがあります。、またはで使用するためのキーボードに変換Caps Lockします。Escvivimgvim

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キーの使用はほとんど残っていません。一般的に、ネチケットプレゼンテーションとコンテンツの分離の両方のおかげで、すべて大文字を使用することは控えるべきです。さらに、テキストの編集中に誤ってキーを押すと、すぐに記録されるとは限りませんが、常に不愉快な動作になります。キーをすべて無効にし、簡単に到達できるキーとして再利用すると、使用に2倍の勝利をもたらします。Caps LockvimvimCaps LockEscvim


機能の交換Caps Lockキーはのための本当の命の恩人であるかもしれないvim上のユーザーのないアップルのMacBook Escのキー
セルジュStroobandt

3
toを再マップするcapslockことをお勧めしctrlます。これにより、さらに多くの問題が解決します。Vimでは、capslock+ [を使用して「Escごめんなさい」を申し訳ありませんが、これを提案する義務があると感じました。
user907860

サスペンドとは何ですか?それはあなたのラップトップのふたを閉じていますか?その後、ソリューションが機能しませんか?ラップトップのふたを閉じた後、vimをどのように使用しますか?
マルコアヴリャシュ

@MarkoAvlijaš How do you use vim after you close the lid on your laptop?もちろん蓋を開けて!
セルジュストローバンド

ハハ私はそれを推測することはありません。つまり、Caps Lockはそれ以降escにマッピングされないということですか?
マルコアヴリャシュ

3

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

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

理由の説明もあります。


1
これは理論的には質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供することが望ましいでしょう
Videonauth

@Videonauth私は答えを修正しました
ブルーソン

どうもありがとうございました:)レビューのキューの人々があなたが何かを変えたのを見ることができるように、私はまだここに私のコメントを残しています。
Videonauth

@Videonauthこれは私の最初の答えであり、私は英語が苦手なので、いくつかの過ちを犯しました。アドバイスをありがとうございます。:P
ブルーソン

どういたしまして。回答を提供することは、コミュニティに貢献する良い方法です。
Videonauth

3

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

Linux Mint 17.2およびUbuntu 16.04で動作します。

使用し続けると考えられるすべての工夫を試しましxmodmapたが、システムがスリープモードになるとすべて失敗します。同じsetxkbmapことは、* settings-daemon(私にとってはxfce4)がスクリプトよりも遅く実行される場合に使用する起動アプリケーションスクリプトにも当てはまります。順序は実際には影響を受けません。

私がついに思いついたものには、次の成分があります。

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/keycodesxevプログラムを使用して、「3」キーのキーコードが12であり、キーコードファイルXfree86でマップされていることを確認し<AE03>ます。
  • 最後にinclude、別のキーボードオプションをアクティブにする別のディレクティブを使用します。この場合、レベル3シフトキー、つまりsterling上記で定義した記号へのアクセスを許可するキーを右Altキーにしたいです。level3同じフォルダ内のralt_switch1つのセクションを持つ単なるファイル名です。周りを見て、含める必要があるものを選択します。

2)私はシステムフォルダに入れませんでしたmylayout。むしろ、システムフォルダから自分の好みのフォルダへのソフトリンクのみを作成し、すぐにこれがストックソフトウェアではないことを確認しました。

3)さらに、更新の手間を防ぐために、再び修正しません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が再び読み込まれ、設定一時停止しても生き残るように見えます。(私はめったにサスペンドを使用せず、ラップトップがどのモードになっているのか本当にわかりません。)


2

リビジョン

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"

(「ユーザー」は実際のユーザー名に置き換えられます。)「名前」には、おそらく「キーボードマップの読み込み」と入力します。必要に応じてコメントを追加し、保存をクリックします。

これで、システムが起動するたびにキーマップがロードされますが、サスペンドまたは休止状態に耐えることはできません。このために、おそらく60_xkbmapという名前の新しいファイルを/ lib / systemd / system-sleepに作成します。

#!/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

参照)上記のように、「user」を実際のユーザー名に置き換えます。

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

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

私は今この方法を試していますが、端末を起動すると次のようなメッセージが表示されます:警告:<AB11>(キーコード97)に定義されているシンボルはありません<I120>(キーコード120)に定義されているシンボルはありません。......その結果がどのようなものになるかはまだわかりません。知ってる?
失われた赤ちゃん

上記の警告にもかかわらずこの方法は機能しますが、一時的なものです-しばらくすると、マッピングが何らかの形で忘れられ、スーパーキーがデフォルトの機能に戻ります。そのため、他の方法で試してみます。Macの基本的な編集ショートカットを再マップして、Commandキーの代わりにControlキーを使用し、それが機能するかどうかを確認します。MacとUbuntuでcut-copy-paste-undo-redoコマンドを同じにしたいだけです。Ubuntuで何かをコピーまたは貼り付けようとするたびに検索メニューが表示されると、非常にイライラします。
失われた赤ちゃん

1

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

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

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

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

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


これは、xmodmapに対応していないためダウンボットされた可能性がありますが、実際には、Gnome Tweakを使用することがマッピングの一部がおかしくなった理由である可能性があることを発見しました。
dragon788

16.04には表示されませんが、これはまだ可能ですか?
クリスマルクス

1
@chrismarxいいえ、彼らはそれを削除しました。最近(16.04)に設定しXKBOPTIONS="ctrl:swapcaps"ました/etc/default/keyboard
18年

0

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

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

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


4
無限while; doループの使用は避けてください。デュアルコアCPUの1つのコアが5秒ごとに42%に達し、ラップトップのバッテリーの充電が大幅に減少しました。
セルジュStroobandt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.