Linux


Linuxのページ

Gentoolinux

Zdnet-tips

NICのデバイス情報

Turbo-Linux

Xwindow-system


USBキーボード

keycode 171 = backslash underscore
keycode 8 = bracketright braceright
keycode 19 = 0 bar
  • キーコード番号はxevで調べてる

Vim6.0以降は日本語標準対応

  • 常識だったかな?
    .vimrc
    set encoding=utf-8
    set termencoding=EUC-JP
    set fileencodings=ISO-2022-JP,US-ASCII,EUC-JP,Shift_JIS

logを取る

emerge system > /tmp/logdesu.log 2>&1
  • とか
apt-get install apache > /tmp/logdesu.log 2>&1
  • など

Xでのキボードからの入力

  • 個人の設定なら ~/.Xmodmap
  • システム全体の設定なら /etc/X11/Xmodmap
keycode   8 = 
keycode   9 = Escape 
keycode  10 = 1 exclam kana_NU exclamdown 
keycode  11 = 2 quotedbl kana_FU oneeighth 
keycode  12 = 3 numbersign kana_A kana_a 
keycode  13 = 4 dollar kana_U kana_u 
keycode  14 = 5 percent kana_E kana_e 
keycode  15 = 6 ampersand kana_O kana_o 
keycode  16 = 7 apostrophe kana_YA kana_ya 
keycode  17 = 8 parenleft kana_YU kana_yu 
keycode  18 = 9 parenright kana_YO kana_yo 
keycode  19 = 0 asciitilde kana_WA kana_WO 
keycode  20 = minus equal kana_HO questiondown 
keycode  21 = asciicircum asciitilde kana_HE dead_ogonek 
keycode  22 = BackSpace 
keycode  23 = Tab ISO_Left_Tab 
keycode  24 = q Q kana_TA Greek_OMEGA 
keycode  25 = w W kana_TE Lstroke 
keycode  26 = e E kana_I kana_i 
keycode  27 = r R kana_SU registered 
keycode  28 = t T kana_KA Tslash 
keycode  29 = y Y kana_N yen 
keycode  30 = u U kana_NA uparrow 
keycode  31 = i I kana_NI idotless 
keycode  32 = o O kana_RA Ooblique 
keycode  33 = p P kana_SE THORN 
keycode  34 = at grave voicedsound dead_abovering 
keycode  35 = bracketleft braceleft semivoicedsound kana_openingbracket 
keycode  36 = Return 
keycode  37 = Control_L 
keycode  38 = a A kana_CHI AE 
keycode  39 = s S kana_TO section 
keycode  40 = d D kana_SHI ETH 
keycode  41 = f F kana_HA ordfeminine 
keycode  42 = g G kana_KI ENG 
keycode  43 = h H kana_KU Hstroke 
keycode  44 = j J kana_MA 
keycode  45 = k K kana_NO ampersand 
keycode  46 = l L kana_RI Lstroke 
keycode  47 = semicolon plus kana_RE dead_doubleacute 
keycode  48 = colon asterisk kana_KE dead_caron 
keycode  49 = Zenkaku_Hankaku Kanji 
keycode  50 = Shift_L 
keycode  51 = bracketright braceright kana_MU kana_closingbracket 
keycode  52 = z Z kana_TSU kana_tsu 
keycode  53 = x X kana_SA greater 
keycode  54 = c C kana_SO copyright 
keycode  55 = v V kana_HI grave 
keycode  56 = b B kana_KO apostrophe 
keycode  57 = n N kana_MI 
keycode  58 = m M kana_MO masculine 
keycode  59 = comma less kana_NE kana_comma 
keycode  60 = period greater kana_RU kana_fullstop 
keycode  61 = slash question kana_ME kana_conjunctive 
keycode  62 = Shift_R 
keycode  63 = KP_Multiply 
keycode  64 = Alt_L Meta_L 
keycode  65 = space 
keycode  66 = Caps_Lock Eisu_toggle 
keycode  67 = F1 
keycode  68 = F2 
keycode  69 = F3 
keycode  70 = F4 
keycode  71 = F5 
keycode  72 = F6 
keycode  73 = F7 
keycode  74 = F8 
keycode  75 = F9 
keycode  76 = F10 
keycode  77 = Num_Lock Pointer_EnableKeys 
keycode  78 = Scroll_Lock 
keycode  79 = KP_Home KP_7 
keycode  80 = KP_Up KP_8 
keycode  81 = KP_Prior KP_9 
keycode  82 = KP_Subtract 
keycode  83 = KP_Left KP_4 
keycode  84 = KP_Begin KP_5 
keycode  85 = KP_Right KP_6 
keycode  86 = KP_Add 
keycode  87 = KP_End KP_1 
keycode  88 = KP_Down KP_2 
keycode  89 = KP_Next KP_3 
keycode  90 = KP_Insert KP_0 
keycode  91 = KP_Delete KP_Decimal 
keycode  92 = 
keycode  93 = 
keycode  94 = 
keycode  95 = F11 
keycode  96 = F12 
keycode  97 = Home 
keycode  98 = Up 
keycode  99 = Prior 
keycode 100 = Left 
keycode 101 = 
keycode 102 = Right 
keycode 103 = End 
keycode 104 = Down 
keycode 105 = Next 
keycode 106 = Insert 
keycode 107 = Delete 
keycode 108 = KP_Enter 
keycode 109 = Control_R 
keycode 110 = Pause Break 
keycode 111 = Print Execute 
keycode 112 = KP_Divide 
keycode 113 = Alt_R Meta_R 
keycode 114 = 
keycode 115 = 
keycode 116 = 
keycode 117 = 
keycode 118 = 
keycode 119 = 
keycode 120 = Hiragana_Katakana Romaji 
keycode 121 = 
keycode 122 = 
keycode 123 = backslash underscore kana_RO 
keycode 124 = 
keycode 125 = 
keycode 126 = 
keycode 127 = 
keycode 128 = 
keycode 129 = Henkan_Mode Mode_switch 
keycode 130 = 
keycode 131 = Muhenkan 
keycode 132 = 
keycode 133 = backslash bar prolongedsound 
keycode 134 =

binfmt_misc

  • 今日は、余り知られていない binfmt_misc という Linux カーネルモジュールに関する TIPS を紹介しよう。ご存じの通り、UNIX は実行可能ファイルの先頭に位置する Magic number を識別することで、スクリプトファイルや ELF 実行ファイルの切り替えを行っている。Perl スクリプトファイルの先頭についている #!/usr/bin/perl という、アレである。この場合、#! が Magic number という訳だ。ちなみに file コマンドが識別のために利用しているのも、この Magic number である。
  • さて、Windows では拡張子に基づいたプログラム自動起動が行われる訳だが、UNIX では不可能なのだろうか?一々、Ruby スクリプトの先頭に #!/usr/bin/ruby という一行をエディターで挿入するよりは、test.rb というファイル名と実行属性を付けるだけで、ruby が起動する方が自然というものだ。
  • しかし、ご心配なく。Linux では先ほど紹介した binfmt_misc モジュールを使うことで、いとも簡単に実現することができる。まずは組み込み型式でも、モジュール型式でも良いから、 CONFIG_BINFMT_MISC を有効化する。モジュールの場合は、insmod も忘れないように。
  • binfmt_misc の解説は Documentation/binfmt_misc.txt に記載されているが、実はここに大きなピットフォールが隠されている。Linux カーネルに含まれている、このドキュメントを読んだだけでは、binfmt_misc の機能は使えない。「なんでやねん?!」私も原因が分からずしばらく悩んだのだが、答えは binfmt_misc のホームページ に記されていた。
  • なんと、明示的にルートファイルシステムにマウントしなければならないのだ!こんな事はカーネルソース内の binfmt_misc.txt には一言も書かれていない。どうもカーネルメンテナの一人が、原作者の意志を無視して、ルートファイルシステムにマウントしなければ、 register/status ファイルが可視化されないという仕様に変更してしまったようである。これに怒った Richard 氏は、binfmt_misc.txt の修正を行わず、そのまま放置。でも、ユーザーから質問が浴びせられるものだから、自分のホームページ上で弁明・・ということなのだろう。
  • 全てとは言わないが、Linux カーネルというのは、一事が万事この調子だ。私はこれまでの苦い経験から、Documentation ディレクトリに置かれている文書群の内容は最初から疑ってかかるようにしている。信じることが出来るのは、ソースリストだけ。良い意味でも、悪い意味でも、このOSは「アマチュア」だと思う。プロとアマの違いは、コードではなくドキュメントに現れるからだ。
  • 本題に戻ろう。以下に実例を示す(binfmt_misc.o モジュールは組み込み済み)。
23:16:21 root@mebius ~ # ls -al /proc/sys/fs/binfmt_misc/
total 0
dr-xr-xr-x    2 root     root            0 Sep 19 23:16 .
dr-xr-xr-x    3 root     root            0 Sep 19 23:16 ..
  • ご覧の通り、カーネルに binfmt_misc モジュールを組み込んだだけでは、/proc/sys/fs/binfmt_misc/ ディレクトリは「空っぽ」である。ここで殆どの好奇心旺盛なユーザーは途方に暮れていることだろう。次に、アドバイス通り mount コマンドを実行する。
23:16:45 root@mebius ~ # mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
23:17:26 root@mebius ~ # ls -al /proc/sys/fs/binfmt_misc/
total 0
drwxr-xr-x    1 root     root            0 Sep 19  2003 .
dr-xr-xr-x    3 root     root            0 Sep 19 23:17 ..
-r--------    1 root     root            0 Sep 19  2003 register
-rw-r--r--    1 root     root            0 Sep 19  2003 status
  • 確かに、register と status ファイルが出現した!(ずっと利用する場合は、/etc/fstab を変更しておこう)。それでは、早速 .rb ファイルを直接実行できるようにセットアップしてみる。
23:25:07 root@mebius ~ # echo ':Ruby:E::rb::/usr/bin/ruby:' >
/proc/sys/fs/binfmt_misc/register
  • binfmt_misc の指定方法は、ホームページ上の解説を参照してほしい。上の例では、. rb 拡張子を持つ実行可能ファイルの場合は /usr/bin/ruby で起動するように指定している。
  • 一見、何事も起こっていないようであるが、カーネルの中身は大変身しているのである。実験してみよう。
23:25:49 root@mebius ~ # cat hello.rb
puts "Hello, world!"
23:26:07 root@mebius ~ # chmod +x hello.rb
23:26:13 root@mebius ~ # ./hello.rb
Hello, world!
  • なんと、スクリプトファイルの先頭に #! /usr/bin/ruby がないにもかかわらず、実行属性をつけるだけで、ruby が起動した。素敵!この辺りは、Linux カーネルならではの楽しさと言えるだろう。