altとsuperを入れ替える


27

Linuxを実行するMacbook Airがあります。キーボードの両側のaltsuperキーを互いに交換したい。

CLIツールでこれを行うにはどうすればよいですか?

更新

Drav Sloanの回答に続いて、私は以下を使用しました。

keycode 64 = Alt_L
keycode 133 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L

keycode 108 = Alt_R
keycode 134 = Super_R
remove Mod1 = Alt_R
remove Mod4 = Super_R
add Mod1 = Super_R
add Mod4 = Alt_R

1
奇妙なことに、bototmではなく最初の6行だけをファイルに一度取り込み、そのファイルでxmobmapファイルを実行したので、私にとってはうまくいきました(mac air)。一番下の行では、エラーが発生しました。
レオUfimtsev

回答:


20

それを達成する1つの方法は、経由xmodmapです。実行xevして主要なイベントを取得できます。実行中xevにボックスが表示され、ボックスにフォーカスして、交換するキーを押すことができます。Altキーのような詳細を出力する必要があります。

KeyPress event, serial 28, synthetic NO, window 0x8800001,
  root 0x25, subw 0x0, time 2213877115, (126,91), root:(1639,475),
  state 0x0, keycode 14 (keysym 0xffe9, Alt_L), same_screen YES,
  XLookupString gives 0 bytes: 
  XmbLookupString gives 0 bytes: 
  XFilterEvent returns: False

私はPCを使用していますが、「コマンドキー」はありませんが、同等の「Windowsキー」があり、xevは次を提供します。

KeyPress event, serial 28, synthetic NO, window 0x8000001,
  root 0x25, subw 0x0, time 2213687746, (111,74), root:(1624,98),
  state 0x0, keycode 93 (keysym 0xffeb, Super_L), same_screen YES,
  XLookupString gives 0 bytes: 
  XmbLookupString gives 0 bytes: 
  XFilterEvent returns: False

xmodmapにはの概念がなくstate、キーマッピングを簡単に破ることができるため、次のことを行うことをお勧めします。

xmodmap -pke > defaults

次に、xmodmapファイルを作成します。

keycode 14 = Alt_L
keycode 93 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L

xev返されたキーコードの使用方法に注意してください。また、ここでは、左のsuperキーとaltキーのみを置き換えています(右のキーは古い動作のままにします)。次にxmodmap、これらのキーを設定するために単に実行できます。

$ xmodmap -v modmap.file
! modmap:
! 1:  keycode 14 = Alt_L
        keycode 0xe = Alt_L
! 2:  keycode 93 = Super_L
        keycode 0x5d = Super_L
! 3:  remove Mod1 = Alt_L
! Keysym Alt_L (0xffe9) corresponds to keycode(s) 0xe
        remove mod1 =  0xe
! 4:  remove Mod4 = Super_L
! Keysym Super_L (0xffeb) corresponds to keycode(s) 0x5d
        remove mod4 =  0x5d
! 5:  add Mod1 = Super_L
        add mod1 = Super_L
! 6:  add Mod4 = Alt_L
        add mod4 = Alt_L
!
! executing work queue
!
        keycode 0xe = Alt_L
        keycode 0x5d = Super_L
        remove mod1 =  0xe
        remove mod4 =  0x5d
        add mod1 = Super_L
        add mod4 = Alt_L

-vサイレント実行用の(冗長)スイッチを使用せずに実行できますが、modmapファイルに間違いを犯した場合に便利です。物事が面倒な場合は、デフォルトを再適用するだけです:

xmodmap defaults

ModmapはXの起動時に実行されることが多いため、modmapコマンドをに配置すると、これらをデフォルトとして適用できます~/.xmodmaprc


これを行う方法はありsetxkbmapますか?これとsetxkbmap -option compose:ralt一緒にオプションを使いたいです。

別の回答でswap_opt_cmdソリューションを使用しましたが、これは徹底的かつ明確に書かれているため、これは賛成に値します。ブラボー先生
ジョンフランクリン

ありがとう。私はxmodmapを台無しにして、askubuntu.com / questions / 1026246
ティム

26

Appleキーボードでこれを行いたい場合は、これを試してください:

echo 1|sudo tee /sys/module/hid_apple/parameters/swap_opt_cmd

これをより低いバージョンのLinuxで動作させるには、これを試してください:http : //blog.chaselambda.com/2014/10/09/apple-keyboard-on-linux-3.8.html


他の回答でも作業を行うが、これはあるマックブックのためのソリューション。魔法のように働いた!
sinisterstuf

1
なぜこれがデフォルトではないのですか?!
ジョンフランクリン

このファイルへの書き込みアクセス権はありません。:-(
itmuckel

1
@ Micha90-以下を使用する必要がありますteeecho "1" | sudo tee /sys/module/hid\_apple/parameters/swap\_opt\_cmd
ジャスティン

2
xmodmapの構成に1時間かかります。できます。次に、2番目の答えを参照してください...
ビロウ

17

左のaltとスーパーキーのみを交換する場合は、ターミナルでコマンドを実行します。

setxkbmap -option altwin:swap_alt_win

デフォルトの動作に戻すには、次を使用します。

setxkbmap -option

注:これは一時的なものです。エフェクトを永久に追加したい場合は、スタートアップファイルに追加します。


4
クリーンで組み込み関数を使用するため、これは受け入れられたソリューションである必要があります。既定の動作復元するには、を使用するだけでよいことに言及しておく必要がありますsetxkbmap -option。また、左のaltとスーパーキーのみを交換する場合は、次のコマンドを使用しますsetxkbmap -option altwin:swap_lalt_lwin
エリック

1
Logitechキーボードを使用していますが、これはWindowsキー(Super_L)を左Alt(Alt_L)に切り替えるのに役立ちました。ありがとう!
デレク

4
$ xmodmap -pke

altおよびsuperがバインドされているキーコードをメモしてから、ホームフォルダーで新しいファイル.xmodmaprcを開く/作成します。たとえば、私のスーパー/ ALTキーはそのようにバインドされています

keycode  64 = Alt_L Meta_L Alt_L Meta_L
keycode 108 = Alt_R Meta_R Alt_R Meta_R
keycode 133 = Super_L NoSymbol Super_L
keycode 134 = Super_R NoSymbol Super_R

しかし、キーを交換するには、次を.xmodmaprcに入れます

keycode  64 = Super_L NoSymbol Super_L
keycode 108 = Super_R NoSymbol Super_R
keycode 133 = Alt_L Meta_L Alt_L Meta_L
keycode 134 = Alt_R Meta_R Alt_R Meta_R

キーコード/ロールの関連付けを上書きする...簡単で、機能します。remove ...ソリューションと比較して欠点があるかどうか疑問に思います。
リングØ17年

grep出力のフィルタリングに使用できるので、xmodmap -pke | grep -i "super\|alt"必要なものが見やすくなることを忘れないでください。
ベンジャミンR

0

xmodmapで右Altと右Ctrlを切り替えることができなかった不幸な人の1人であれば、おそらくこれが役立つでしょう。

Altキーを押しながらeキーを押してéを取得した場合、このソリューションが最適です(改善が必要です)。

ターミナルでこれを実行します(xevでキーコードを確認します):

xmodmap -e "keycode 108 = Alt_R Meta_R Alt_R Meta_R"

次に、このコードを.Xmodmapに追加します。

remove Control = Control_R
remove Mod1 = Alt_R
keycode 105 = Alt_R
keycode 108 = Control_R
add Control = Control_R
add Mod1 = Alt_R

このコードはAlt_GrキーをAlt_Rに設定し、Alt_rをCtrl_Rと交換します。

ログアウト後にこれを保持したい場合は、スタートアップシェルファイルのいずれかに次のコマンドを追加します。たとえば、〜/ .profile:

if [ -f $HOME/.Xmodmap ]; then
  xmodmap -e "keycode 108 = Alt_R Meta_R Alt_R Meta_R"
  /usr/bin/xmodmap $HOME/.Xmodmap
fi

ソース:question1 question2

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.