お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2010-04-08 08:12:51

b-fighter
新しいメンバ
登録日: 2010-04-08

10.04で、xkbのRedirectKeyが設定できない

はじめまして、こんにちは。

以前、こちらのフォーラムで説明されていた
https://forums.ubuntulinux.jp/viewtopic.php?id=4576
を参考にして、xkbのRedirectKeyを使って、Ctrl+任意のキーを、他の単一のキーコードに変えて9.10を使ってます。

10.04も、試しに別のパーティションに入れてみてるのですが、例えば上の例を更にシンプルにして

key <AD10> {
        symbols[Group1]= [ p, P],
        actions[Group1]= [ RedirectKey(key=<UP>),NoAction()]
};

のようなことをしてみても、何かのはずみで、ごくたまにRedirectされるような感じで、基本的には動作しません。
場合によってはログイン画面に戻ってしまいます。
xorgのバージョンが変わってるのは承知してますが、さすがに急にこれのサポートを止めるとは考えにくいのですが、
udevなども絡み、あるいはxorg.confが非推奨になってるのと同じような理由で、現在では勧められない方法になった
のかなと思ってみたりもしています。

clearmods=Controlの機能が必要なので、xkbを使うしかないように思ってましたが、あるいは他に推奨される方法など
ありましたら、ご教示頂ければ幸いに思います。

オフライン

 

#2 2010-04-09 06:26:24

b-fighter
新しいメンバ
登録日: 2010-04-08

Re: 10.04で、xkbのRedirectKeyが設定できない

10.04は全体的にすごくいいんですが、移行するためには、個人的に、この部分がどうしてもネックになるので、
とりあえず、バグの疑いも込めて、ちょっとリポート出してみます。ありがとうございました。LTSということで、なんとか目処が立てばうれしいです。

オフライン

 

#3 2010-04-10 13:45:17

MidSpecLowLoad
メンバ
登録日: 2009-11-19

Re: 10.04で、xkbのRedirectKeyが設定できない

実際に試してないのですが、
xbindkeysとxvkbdの組み合わせで何とかならないでしょうか。
まったく詳しくないので、できなかったらごめんなさい。

xbindkeysとxvkbdパッケージを導入。

~/.xbindkeysrcに

コード:

"/usr/bin/xvkbd -xsendevent -text "\[Up]""
  control + p

のようにしておいて
~/.config/autostart/xbindkeys.desktop といファイルを作り、内容を下記のようにしておく

コード:

[Desktop Entry]
Type=Application
Exec=xbindkeys
Hidden=false
X-GNOME-Autostart-enabled=true
Name[ja_JP]=xbindkeys
Name=xbindkeys
Comment[ja_JP]=xbindkeys
Comment=xbindkeys

オフライン

 

#4 2010-04-10 15:03:38

yfujita
新しいメンバ
登録日: 2009-01-18

Re: 10.04で、xkbのRedirectKeyが設定できない

https://forums.ubuntulinux.jp/viewtopic.php?id=4576
に投稿したものです. Openofficeの問題はとりあえず9.04と9.10では発生しないので気にせずに使っています.
ただ、gnomeとacrobat readerでp, o, e, f, nなどが単独でCtrlキーを押した状態と同じになるという不具合が
あります.

それは別として下記の記述について

b-fighter による投稿:

10.04も、試しに別のパーティションに入れてみてるのですが、例えば上の例を更にシンプルにして

key <AD10> {
        symbols[Group1]= [ p, P],
        actions[Group1]= [ RedirectKey(key=<UP>),NoAction()]
};

これですが、xkbの文書を読んだかぎり、どうしてCtrl-pで<UP>キーに割り当てられるのか分かりませんでした.
私は、
    type "EMACS" {
      modifiers = Shift+Control;
      map[Shift] = Level2;               <- ShiftキーはLevel2
      map[Shift+Control] = Level2;   <- Shift+ContrlキーもLevel2
      map[Control] = Level3;           <- ControlはLevel3
      level_name[Level1] = "Base";
      level_name[Level2] = "Shift";
      level_name[Level3] = "Emacs";
    };
でキータイプを定義して、
actions[Group1] = [<Level1>, <Level2>, <Level3>]
で、それぞれのLevelのアクションを定義する、という理解でした. b-fighterさんのやり方はどういうカラクリで
うまく動いているんでしょうか?
私もいまいち理解できているかどうか分からず、xkbの解説を探していますので、
どこで上記の記述法を調べたのか教えていただけませんか?


昔試してみたことがあるんですが、xbindkeys はキー入力の度にプロセスを起動するので
ものすごく遅い気がしました. 今は、気にならない程度に早くなっているんでしょうか?

オフライン

 

#5 2010-04-10 20:03:48

b-fighter
新しいメンバ
登録日: 2010-04-08

Re: 10.04で、xkbのRedirectKeyが設定できない

MidSpecLowLoadさんに教えて頂いた方法もやってみました。絶対的な速度も含め、意図する挙動に近い状態にはなるんですが、
カーソルキーの動作の代替をさせるには、キャレットが動いてる間に処理のタイミングが合わなくなるのか、キャレットが見えなくなって
しまうという点が、唯一にして致命的な部分でした。
Windowsの世界からLinuxに足を踏み入れた時には、このあたり、むしろ柔軟で容易に好みの形にすることができると予想してたんですが、
なかなかどうして、難しいものですね。

それと、まず、誤解を招くような表現だったことについて、yfujitaさんにお詫びいたします。
本当にやりたいことは、モディファイアを無効にした上で別のキーが押されたことにしたいけれども、RedirectKeyの段階で跳ねられてしまうという、根本の問題点に絞って言及したつもりでした。ですから、冒頭にある

actions[Group1]= [ RedirectKey(key=<UP>),NoAction()]

という書き方で10.04で確認できるのは、普通にpを押したときにRedirectさせるという基本さえできないという状況のみです。すみませんでした。


ちなみに、9.10での現在の自分の設定は、

typesのほうのファイルでは、
   type "ALPHABETIC2" {
        modifiers = Shift+Mod5;   
        map[None] = Level1;
        map[Shift] = Level2;
        map[Mod5] = Level3;
    level_name[Level1] = "Base";
        level_name[Level2] = "Shift";
        level_name[Level3] = "Mod5";
    };

symbolsのほうで、
   modifier_map Mod5  { <LCTL> };   
   key <AC02> {  type = "ALPHABETIC2",repeat=yes, symbols =[s,S,s],
   actions =[ NoAction(), NoAction(),RedirectKey(key=<LEFT>,clearmods=Control) ]};   
   
などとしてます。いわゆるダイヤモンドカーソルってやつです。
ControlをMod5にしてるのは、Nautilusなどでファイル名をインラインで変更するときに、おっしゃるように逆にCtrlが付加されるという
妙な挙動になったので、それを迂回するための苦肉の策だったと思います。

で、今、あらためて見ると、その他のキーには、

  key <AB04> {  [v,V,v,v,v] };

などとして、幾分冗長な設定もしてるんですが、たぶんこうやらないと、Redirectしてないキーについては、アプリによっては本来の
Ctrl+Vなどとが押されたことが感知できなかったからだったと思います。
ControlをMod5にしたことのつけだと思いますが、ずいぶん前のことなので、この部分は自分でもよく覚えてません。。
全く回りくどいにも程があるという(笑)

ともあれ、先のご投稿のおかげで随分と楽をさせて頂いておりました。あらためてお礼を申し上げます。

オフライン

 

#6 2010-04-26 00:57:37

yfujita
新しいメンバ
登録日: 2009-01-18

Re: 10.04で、xkbのRedirectKeyが設定できない

yfujitaと申します.

b-fighterさんの投稿のおかげで、nautilusやacrobat readerで挙動がおかしかった問題を解決することができました.
有難うございました.
問題の根幹はどうやら、gtkがキー入力を独自解釈するためのようです. こまったもんです.
https://bugzilla.gnome.org/show_bug.cgi?id=100439
http://osdir.com/ml/xfree86.internationalization/2004-04/msg00013.html
そのため、Controlキーをb-fighterさんの投稿のとおり別のMod3に割り当てて、
gtkが反応しないようにする必要があるようです.

10.04でredirectKeyが使えないとなると、移行できませんね. 困りました...

Ctrl-n, p, f, b, h, d, e, aをEMACS風にするやり方:
/usr/share/X11/xkb/types/complete に "EMACS"と"REPLACE_CONTROL"を定義する.
    type "EMACS" {
      modifiers = Shift+Mod3;
      map[None] = Level1;
      map[Shift] = Level2;
      map[Mod3] = Level3;
      map[Shift+Mod3] = Level4;
      level_name[Level1] = "Base";     //1番目
      level_name[Level2] = "Shift";     //2番目 shiftキー
      level_name[Level3] = "Emacs";  //3番目 Mod3キー
      level_name[Level4] = "Norm";   //4番目 Mod3 + Shiftキー
    };
    type "REPLACE_CONTROL" {
      modifiers = Shift+Mod3;
      map[None] = Level1;
      map[Mod3] = Level2;
      map[Shift] = Level3;
      level_name[Level1] = "Base"; //1番目
      level_name[Level2] = "Control"; //2番目 Mod3キー
      level_name[Level3] = "Shift"; //3番目 Shiftキー
    };

/usr/share/X11/xkb/symbols/pc 内のmodifier_mapを変更する. (Mod3が使われていなかったので、Mod3を使う)
    //modifier_map Control{ Control_L, Control_R };
    modifier_map Mod3     { Control_R, Control_L };

/usr/share/X11/xkb/symbols/jp 内の
n, p, f, b, h, d, e, a のキーを以下の例のように変更する.
    //key <AB06> { [ n, N     ] };
    key <AB06> {
        type= "EMACS",
        // 3番目がMod3キーが押されているときの挙動
        // redirectで<DOWN>にしつつ、shiftキーとControlキーの修飾を消している?
        symbols[Group1]= [ n, N, NoSymbol, n],
        actions[Group1]= [ NoAction(), NoAction(),
          RedirectKey(key=<DOWN>, clearmods=Shift+Control), NoAction()]
    };

それ以外を以下の例のように変更する. (数が多くて大変)
    //key <AB07> { [ m, M     ] };
    key <AB07> {
          type="REPLACE_CONTROL",
          // 2番目がMod3キーが押されている時の挙動
          // redirectで自身に戻しつつ、Control修飾を付加して、Mod3修飾を消す
          symbols[Group1] = [ m,  NoSymbol, M],
          actions[Group1] = [ NoAction(),
            RedirectKey(key=<AB07>, modifiers=Control, clearmods=Mod3),
            NoAction()]
    };

/usr/share/X11/xkb/symbols/pc 内のテンキーの定義を以下の例のように変える.
    //key <RGHT> {  [  Right    ] };
    key <RGHT> {
      type= "PC_CONTROL_LEVEL2",
      //symbols[Group1] = [  Right, NoSymbol],
      symbols[Group1] = [  Right, Right],
      actions[Group1]= [ NoAction(), NoAction()]
    };

設定を読み込ませる. (terminalから)
setxkbmap -v 10 jp

* XOrgのアップデートの度に上書きされるのでその度に再設定が必要です.

オフライン

 

Board footer

Powered by FluxBB