ciguwerao

<< 前の記事 | main | 次の記事 >>

2017/01/26の記録:Linuxで起動時にNumlockをON(と同じ状態)にする

Linuxで、と大きく出たが、Linuxなら必ず、というわけではないと思う。僕の環境はDebian Jessie LXDEだが、それに限らずそれなりに広い範囲の環境で使えるやり方だとは思うが、その範囲の広さがどの程度なのかはよくわからない。

起動時にNumlockをONにするやり方はウェブ上でもたくさん記事があり、例えば次のページは環境ごとにいろいろなやり方があることを教えてくれている。

まっとうな人間として生きていきたい方はこうしたページを参考にして設定されたほうが無難だと思われる。

裏街道を歩むことを厭わない方、むしろ裏街道にこそおれの生き場所も死に場所もある、という方であれば、以下に書く僕のやり方を参考になさってもよろしいかと存ずる。

== 02/06追記 ==

この記事を書いた時にはうっかりしてその点を忘れていたのですが、母の機械での問題は単にシステム起動時にNumlockがOFFになっているというだけではなく、NumlockをONにするとメインのキーボードのJKLのあたりのキーも同時に数字キー扱いになってしまい、テンキーの数字とメインのキーボードの当該部分の文字とを同時に打つことができない(その都度Numlockの切り替えが必要になる)ことが、より重要な問題でした。

この下に書いてある僕の方法であればどちらでも、その問題も同時に解決できます。

上掲のリンク先等にあるやり方は、僕自身が試したことがないので、この問題も解決してくれるものなのか、分かりません。

僕の環境であるLightDMについては、上掲リンク先では "numlockx" という仕組みをセッション開始時に起動させる方法が挙げられていますが、この仕組みは今試したところ単純にナムロックのオンオフ切換をするもので、オンにするとJKLの部分は数字になってしまいます。自動起動までは試していませんが、それをした場合おそらく、ログイン時にはJKLのあたりが数字になってしまうと思われます。

========

今回この件に僕の目が行ったきっかけは、母のパソコンでOSの入れ替えをしたこと。

母の機械にはこれまでLinux Mint 13 MATEが入っていた。

そのサポート期間が終わりなんずるので手を打つ必要があったのだが、その頃のLinux Mintはバージョンアップの際に、面倒なことにクリーンインストール、つまり一旦全部消して改めて新しいのを入れなおすことを推奨していた。

それでOS入れ替えをしたわけ。

もちろん新しいバージョンのLinux Mint MATEを入れることも考えたが、母のパソコンのスペックと、13からのバージョンアップに伴う進化とを考えると、もうLinux Mintは重いかもしれない、という懸念があったし、母がLinux Mintの機能を使いこなしているというわけでもなかったので、僕自身の機械に入っていて僕がよく慣れているDebian Jessie LXDEを入れることにした。

その際のことについても、簡単なメモとしてはここに書いておく価値のあることがあったのでそのうちに書こうと思っているが、それはそれとして、OSのインストールが無事済んで環境を使いやすく整えていく段階になって、この記事に関わるテンキーの問題が出てきた。

Linux Mint MATEでは昔記事にしたように "xmodmap" という仕組みをログイン時に自動起動させることでその問題を解決していたのだが、LXDEではなぜだか良くわからないがxmodmapを自動起動させられない(手動で起動させればちゃんと働く)。

そこで別のやり方が必要になる。

僕の機械でもそれはしてあるわけだが、その設定書類の場所や記述の仕方などが全部頭に入っているわけではないので、僕の機械を覗きながら母の機械の設定を行った。

母の機械はちゃんと設定できたので万事めでたしめでたし、で数日過ぎたのだが、さっき、むしろ僕の機械でテンキーの挙動がおかしいことに気づいた。

パソコンを起動させれば何もしないでもテンキーで数字が打てるはずなのに、ナムロックをオンにしないと矢印キーの機能になってしまって数字が打てない。

それで右往左往したのだが、わかってみればなんのことは無い。母の機械の設定をする際に必要があって、僕の機械を覗くだけでなく実際に設定をいじって確認したりしたのに、元に戻すのを忘れていただけだった。

元に戻せばそれで終わりなのだが、それに気づかないで右往左往する中でウェブ上でNumlockの設定関連の事をいろいろ検索してみたところ、冒頭で紹介したような記事はいくつも見つかったものの、僕のやり方を書いているところは見当たらなかった。 それで、問題は解決したけれどもせっかくだからそのやり方をここに書いておこう、と思い立ったわけだ。

いつものように前置きが大変長くなって恐縮だが、これからが本番。

母の機械にしたのは次のやり方。

/etc/default/keyboard
という書類をroot権限で開き、

XKBOPTIONS=""

という行を

XKBOPTIONS="numpad:mac"

とする。

もし " " の中にすでになにか書いてあったら、カンマ ( , ) を打って続ければいい。

それだけ。

これでパソコンを起動させればテンキーで数字が打てる。

これは字面を見れば想像がつくと思うが、numpadすなわちテンキーをマック風に使う、という意味。

マック風というのがどういうものかと言うと、早い話がナムロックも糞もなく、テンキーは常に数字が打てるだけで、矢印キーの代わりになんぞしない、というもの。

上に書いたのはシステムの設定書類をいじるやり方だが、Linux Mint等の優し目の環境であれば、キーボード関係の設定のところを一生懸命探せばGUIでも同じことが個人設定として設定できるようになってるんじゃないかと思う。確認してないが。

とりあえず個人設定する方法は、

setxkbmap -option numpad:mac

というコマンドを、パソコンを起動させた時に走らせれば良い。

その具体的やり方は環境によって違うが、LXDEについては2016/08/30の記録で書いたので、そちらをご参照のこと。

その記事の中で「2」としたやり方の方は、LXDE以外のいくつかの環境とも共通なので、LXDE以外の環境の方にも参考になるかと思われる。

これは別に裏街道というわけではなく、せいぜい裏街道への分かれ道程度のことなので、万人におすすめできると思っている。

しかし問題点は、書いたように数字しか打てなくなって、矢印キーとして使えなくなること。

ナムロックキーで数字と矢印キーを行ったり来たりしたい人がいるかもしれない。

それで、僕の思いついた怪しいやり方を紹介する。

僕自身がよく仕組みを理解した上でやってるわけではなく、試してみてこうやったらとりあえずうまくいったよ、ということに過ぎないので、その点はご了解いただきたい。

発想としては、上に書いた "numpad:mac" という設定を規定している書類があるはずなので、その書類をいじっちまえ、ということ。

その書類は、
/usr/share/X11/xkb/types/numpad
という書類。

この書類の上の方には次のように書いてある。

partial default xkb_types "pc" {
  type "KEYPAD" {
    modifiers = Shift+NumLock;
    map[None] = Level1;
    map[Shift] = Level2;
    map[NumLock] = Level2;
    map[Shift+NumLock] = Level1;
    level_name[Level1] = "Base";
    level_name[Level2] = "Number";
  };
  include "extra(keypad)"
};

// On Mac keypads, level 1 and 2 are swapped.
partial xkb_types "mac" {
  type "KEYPAD" {
    modifiers = None;
    map[None] = Level2;
    level_name[Level2] = "Number";
  };
  include "extra(keypad)"
};

わかると思うが下の方の "mac" の部分が "numpad:mac" の内容を規定しているところで、"modifiers = None" が煎じ詰めれば何があっても変化させない、という意味。 "map[None] = Level2" は、Noneつまり何もしてない時にはレベル2だよ、ということ。合わせて、いついかなる時もレベル2に固定、ということになる。(レベル2の名前が「ナンバー」だよ、と書いてあるのもわかると思う)

レベル2って何だよ? ってことは、前に書いた記事などを参照していただければと思う。

これはただの解説で、マックの方は今はほっとけばいい。

大事なのはその上。 "pc" の部分。

その冒頭にはまずxkbの部分的なデフォルトのタイプ、その名前は「PC」だがそれは……、と書いてあって、その下は、シフトとナムロックで変化させる場合がある、何もしない時はレベル1、シフトを押した時はレベル2、ナムロックの時もレベル2、ナムロックでシフトを押した時はレベル1、レベル1の名前が「ベース」、レベル2の名前が「ナンバー」、ここに書いたこと以外のことについては、 "extra(keypad)" という設定をそのまま使います、ということ。

"numpad:mac" の代わりに "numpad:pc" と書けばこの設定になるわけだが、デフォルトなのでそんなことしないでも、何も書かなければこれになる。

だから、大部分の人の環境では、機械を起動したあと何もしなければテンキーは「ベース」状態で、シフトを押すかナムロックをオンにすれば「ナンバー」になる。

「ベース」状態がすなわち矢印キーだということは想像がつくと思う。

だから、やりたい設定にするには、これをひっくり返しちまえばいい。

「ベース」や「ナンバー」とここで名付けられたレベル1とレベル2の、より具体的な内容を設定した書類は、どれだか忘れたが探せばどっかにある。それ自体をいじるという方法もあるが、めんどくさいと思う。

選択肢が2つあり、簡単なのは、このデフォルトである "numpad:pc" の設定自体をひっくり返しちまうこと。

map[None] = Level1;
map[Shift] = Level2;
map[NumLock] = Level2;
map[Shift+NumLock] = Level1;

の4行の、1と2を入れ替えるだけでいい。(要ルート権限)

map[None] = Level2;
map[Shift] = Level1;
map[NumLock] = Level1;
map[Shift+NumLock] = Level2;

しかし、デフォルト設定自体を変えてしまうことに抵抗を感じる方もいらっしゃるだろうと思う。僕もそう感じる。

で、ふたつ目の選択肢は書き換えではなく追加をする。

ちょっと面倒だが以下の作業。

設定内容自体は今書いたレベル1と2の入れ替えだけでいいが、デフォルトではないので頭の記述だけはmacのを持ってきて、以下のような内容を、おそらくどこでもいいのだろうが、pcとmacの間に付け加える。

partial xkb_types "gyakupc" {
  type "KEYPAD" {
    modifiers = Shift+NumLock;
    map[None] = Level2;
    map[Shift] = Level1;
    map[NumLock] = Level1;
    map[Shift+NumLock] = Level2;
    level_name[Level1] = "Base";
    level_name[Level2] = "Number";
  };
  include "extra(keypad)"
};

いじらなければいけない書類はこの
/usr/share/X11/xkb/types/numpad
という書類だけではなく、他にもある。

その書類は、今の僕にはなぜそれがそれなのかはよくわからないのだが、昔良くわかっていたことがあって、突き止めてある。

  1. /usr/share/X11/xkb/rules/evdev
  2. /usr/share/X11/xkb/rules/evdev.lst
  3. /usr/share/X11/xkb/rules/evdev.xml

この3つの書類をルート権限でいじる。

ひとつ目には、長い書類だが一番下に

numpad:pc           =    +numpad(pc)
numpad:mac          =    +numpad(mac)
numpad:microsoft    =    +numpad(microsoft)
numpad:shift3       =    +numpad(shift3)

と書いてあるので、これまたpcとmacの間に

numpad:gyakupc      =    +numpad(gyakupc)

という記述を挟みこむ。

2つ目も要領は一緒で、僕の場合836行目辺りに

numpad:pc            Default numeric keypad keys
numpad:mac           Numeric keypad keys always enter digits (as in Mac OS)

とあるので、間に

numpad:gyakupc       Default numeric keypad keys no gyaku

を追加する。

ただし、英語のできる人は英語で書いたほうがかっこいい。

3つ目は、更に長い書類だが6542行あたりの、

<option>
  <configItem>
    <name>numpad:pc</name>
    <description>Default numeric keypad keys</description>
  </configItem>
</option>
<option>
  <configItem>
    <name>numpad:mac</name>
    <description>Numeric keypad keys always enter digits (as in Mac OS)</description>
  </configItem>
</option>

の真ん中の、オプション閉じる、オプション開く、の間に

<option>
  <configItem>
    <name>numpad:gyakupc</name>
    <description>Default numeric keypad keys no gyaku</description>
  </configItem>
</option>

を書き加える。

つまりこういうこと。

<option>
  <configItem>
    <name>numpad:pc</name>
    <description>Default numeric keypad keys</description>
  </configItem>
</option>
<option>
  <configItem>
    <name>numpad:gyakupc</name>
    <description>Default numeric keypad keys no gyaku</description>
  </configItem>
</option>
<option>
  <configItem>
    <name>numpad:mac</name>
    <description>Numeric keypad keys always enter digits (as in Mac OS)</description>
  </configItem>
</option>

で、最後に、numpad:macの場合と同じように
/etc/default/keyboard
という書類をroot権限で開き、

XKBOPTIONS="numpad:gyakupc"

とする。

これは上に書いたようにシステムの設定。個人設定をしたい場合は、やはり上のnumpad:macの場合と一緒なので、そちらをご覧いただきたい。

これでうまくいくはず。

つまり、ナムロックがオフだと数字が打て、オンにすると矢印キーになる。

== 02/06追記 ==

上に追記したように元々ナムロックがオンだとJKLのあたりが数字になる状態だった場合、このやり方をしてもその点は変わりません。つまりナムロックがオンだとテンキーは矢印キーでJKLのあたりは数字になります。オフだとテンキーが数字でJKLはJKLです。

========

ただし、繰り返すがあくまでそれは僕の場合ではそうなった、ということ。

どの程度の範囲の人に通用する話なのかはよく知らない。

試してご覧になる場合は、いじる書類すべてについて事前にバックアップを取っておかれることを強くお勧めする。

| Linux関連 | 18:51 | comments(0) | trackbacks(0) |

スポンサーサイト

| - | 18:51 | - | - |
コメント
コメントする








この記事のトラックバックURL
http://ciguwerao.jugem.jp/trackback/565
トラックバック
ciguwerao
CALENDAR
S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
31      
<< December 2017 >>
LATEST ENTRIES
SELECTED ENTRIES
CATEGORIES
ARCHIVES
SPONSORED LINKS
qrcode