ラベル キーボード の投稿を表示しています。 すべての投稿を表示
ラベル キーボード の投稿を表示しています。 すべての投稿を表示

2019年10月18日金曜日

懐かしの kbanner を CentOS8 でコンパイルしたら動いた!

1994年頃、仕事で NEC の UNIXワークステーション EWS4800 を日常的に使っていました。そのマシンの /usr/local/bin (職場の中央サーバを NFS マウントして利用していた) に、kbanner というツール (漢字に対応した banner ソフト) がインストールされていて、その -s オプションの表示の綺麗さに魅了され、よく利用していました。
当時は、誰が作ったものなのか?をググったりはできませんでしたし、ソースは入手できないものだと思っていました。

時は流れ、2003年ごろから Linux どっぷりな仕事 (使うマシンも Express5800 に変わった) になり、kbanner のソースも持っていませんでしたので、EWS4800 の衰退と共に記憶の彼方になっていきました。

そして今、ふと懐かしく思い出し、どこかにソースないのかなと、ググってみたら、ありました!
なんと kbanner の作者さんは、「キーボード配列 QWERTYの謎 NTT出版 (2008年3月), ISBN978-4-7571-4176-6.」の著者さんだったのかー、キーボード好き (特に ThinkPad と RealForce) が高じて手もとにあります。

さっそくダウンロードして、現在の自宅メインマシン (ThinkPad 25 + CentOS8) で make してみました。
コンパイルエラーでも起きるかなと思ったのですが、警告は出るものの、修正なしでビルドできました!
[root@hoge kbanner2]# make
cc -c -O kbanner.c
kbanner.c:5:14: 警告: 組み込み関数 ‘malloc’ と型が競合しています [-Wbuiltin-declaration-mismatch]
 extern char *malloc();
              ^~~~~~
kbanner.c:85:1: 警告: 戻り値の型をデフォルトの ‘int’ にします [-Wimplicit-int]
 main(argc,argv)
 ^~~~
kbanner.c: 関数 ‘main’ 内:
kbanner.c:115:14: 警告: 関数 ‘atoi’ の暗黙的な宣言です [-Wimplicit-function-declaration]
       column=atoi(&((*argv)[1]));
              ^~~~
kbanner.c:82:3: 警告: 関数 ‘exit’ の暗黙的な宣言です [-Wimplicit-function-declaration]
   exit(1);\
   ^~~~
kbanner.c:120:7: 備考: in expansion of macro ‘USAGE’
       USAGE
       ^~~~~
kbanner.c:82:3: 警告: 組み込み関数 ‘exit’ の互換性がない暗黙的な宣言です
   exit(1);\
   ^~~~
kbanner.c:120:7: 備考: in expansion of macro ‘USAGE’
       USAGE
       ^~~~~
kbanner.c:82:3: 備考: include ‘<stdlib.h>’ or provide a declaration of ‘exit’
kbanner.c:4:1:
+#include 
 
kbanner.c:82:3:
   exit(1);\
   ^~~~
kbanner.c:120:7: 備考: in expansion of macro ‘USAGE’
       USAGE
       ^~~~~
kbanner.c:126:5: 警告: 組み込み関数 ‘exit’ の互換性がない暗黙的な宣言です
     exit(1);
     ^~~~
kbanner.c:126:5: 備考: include ‘<stdlib.h>’ or provide a declaration of ‘exit’
kbanner.c:129:5: 警告: 関数 ‘kbanner’ の暗黙的な宣言です [-Wimplicit-function-declaration]
     kbanner(stdin);
     ^~~~~~~
kbanner.c:130:5: 警告: 組み込み関数 ‘exit’ の互換性がない暗黙的な宣言です
     exit(0);
     ^~~~
kbanner.c:130:5: 備考: include ‘<stdlib.h>’ or provide a declaration of ‘exit’
kbanner.c:142:3: 警告: 組み込み関数 ‘exit’ の互換性がない暗黙的な宣言です
   exit(0);
   ^~~~
kbanner.c:142:3: 備考: include ‘<stdlib.h>’ or provide a declaration of ‘exit’
kbanner.c: トップレベル:
kbanner.c:145:1: 警告: 戻り値の型をデフォルトの ‘int’ にします [-Wimplicit-int]
 kbanner(fp)
 ^~~~~~~
kbanner.c: 関数 ‘kbanner’ 内:
kbanner.c:152:12: 警告: implicit declaration of function ‘kgetchar’; did you mean ‘getchar’? [-Wimplicit-function-declaration]
   while((i=kgetchar(fp))!=EOF){
            ^~~~~~~~
            getchar
kbanner.c:159:4: 警告: implicit declaration of function ‘kputchar’; did you mean ‘putchar’? [-Wimplicit-function-declaration]
    kputchar(i*256+(j&127));
    ^~~~~~~~
    putchar
kbanner.c: トップレベル:
kbanner.c:202:1: 警告: 戻り値の型をデフォルトの ‘int’ にします [-Wimplicit-int]
 kputchar(c)
 ^~~~~~~~
kbanner.c: 関数 ‘kputchar’ 内:
kbanner.c:267:7: 警告: 非 void を戻す関数内に値が無い ‘return’ があります
       return;
       ^~~~~~
kbanner.c:202:1: 備考: ここで宣言されています
 kputchar(c)
 ^~~~~~~~
kbanner.c: トップレベル:
kbanner.c:278:1: 警告: 戻り値の型をデフォルトの ‘int’ にします [-Wimplicit-int]
 kgetchar(fp)
 ^~~~~~~~
cc -c -O font1.c
cc -c -O font2.c
cc -c -O font3.c
cc kbanner.o font1.o font2.o font3.o -o kbanner
strip kbanner
[root@hoge kbanner2]# ls -l
合計 1356
-rw-r--r-- 1 1001 wheel    321  7月 13  2004 Makefile
-rw-r--r-- 1 1001 wheel    203  7月 13  2004 README
-rw-r--r-- 1 1001 wheel 289120 10月 15  1993 font1.c
-rw-r--r-- 1 root root   79952 10月 18 04:47 font1.o
-rw-r--r-- 1 1001 wheel 289120 10月 15  1993 font2.c
-rw-r--r-- 1 root root   79952 10月 18 04:47 font2.o
-rw-r--r-- 1 1001 wheel 278000 10月 15  1993 font3.c
-rw-r--r-- 1 root root   76912 10月 18 04:47 font3.o
-rwxr-xr-x 1 root root  245376 10月 18 04:47 kbanner
-rw-r--r-- 1 1001 wheel    692 10月 15  1993 kbanner.1
-rw-r--r-- 1 1001 wheel   8594 10月 15  1993 kbanner.c
-rw-r--r-- 1 root root   16208 10月 18 04:47 kbanner.o
[root@hoge kbanner2]# ./kbanner --help
Usage: ./kbanner [-l|-numofcol] [-s] [-m] [file]
早速動かしてみると文字化け、、、当時は EUC-JP でしたので、環境変数 LANG=ja_JP.eucJP を設定し、端末文字コードも EUC-JP にして、再実行。
[root@hoge kbanner2]# echo -n キーボード配列 QWERTYの謎 | ./kbanner -s -8
     ;                                 ,    ; ;                       ,     , , ,,,,,,,,, ,,,,,  ,,,,,,,,, ,  ;                 
     ';   ,,,                          ;                              ;     ' '    ; ;        ;     ;      ;  ;                 
    ,,;;'''                      '''''';'''''''                       ;          ;';';';      ;     ;,,,,  ;  ;                 
 ''''  ;   ,,,,  ',,,,,,,,,,,,,     ,  ;   ,     ',,,,,,,,,,,,,       ;'';,,     ; ; ; ;  ;''''    ;'   ;  ;  ;                 
     ,,;;'''                       ,;  ;   ';,                        ;    '''   ;'  '';  ;      ,;';, ;'  ;  ;                 
  ''''  ;,                        ,;   ;     ;,                       ;          ;,,,,,;  ;          ';'   '  ;                 
         ;                       ''    ;      '                       ;          ;     ;  ;,  ,;    ,;'       ;                 
         ';                          '''                              '          '''''''   '''' ,,;''       ,,;                 
      ,,,,      ,,,,,  ,,  ,,,,,  ,,,,,,,,,,,     ,,,,,,,,,      ,,,,,,,,,,,,,   ,,,,,   ,,,,,                   ,,,, ,  ,  ;  ,
   ,;'    ';,     ;    ;;    ;      ;       ',      ;      ',    ;     ;     ;     ;,     ,;        ,,;';';,,   ,,,,,,'; '; ; ;'
  ,;        ;,    ;,  ;'';  ,;      ;    ,          ;       ;          ;            ;,   ,;       ,;'   ;   ';   ,,,,    ,,,;,,,
  ;          ;     ; ,;  ;, ;       ;,,,,;          ;,,,,,,'           ;             ;, ,;       ,;    ;'    ';       ,,,  ,;,  
  ;,        ,;     ; ;    ; ;       ;    ;          ;     ;,           ;              ';'        ;    ;'      ;  ''''   ; ,';', 
   ;, ,'', ,;      ';;    ;;'       ;        ,      ;      ;,          ;               ;         ;  ,;'      ;'  ,,,,   ;,' ; ',
    '',,,,';  ,     ;      ;      ,,;,,,,,,,;     ,,;,,   ,,;,,      ,,;,,           ,,;,,        '''    ,,;''   ;  ;  ,;   ;   
            ''                                                                                                   ;,,; ;' ',,,,,,
[root@hoge kbanner2]# 
これだ、これだよ〜、懐かしいなあ。また利用させてもらおうと思います。作者さん、ありがとうございます m(_ _)m

2018年11月8日木曜日

CentOS6 で ThinkPad USB トラックポイントキーボード を使う

lenovo が販売していた頃にはあまり興味を持てず、買いそびれていた ThinkPad USB トラックポイントキーボード (55Y9024) を、中古で入手することができました。
CentOS6 が動いている NEC 製 PC (Mate) で使い始めましたが、若干設定が必要でしたので、その備忘録です。

まず、何も設定しないと TrackPoint が重すぎて、人差し指がつります。
これについては、以前 ThinkPad X300 の TrackPoint が重くて、調べた際の調整方法が使えました。
[root@hoge ~]# xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint    id=6    [slave  pointer  (2)]
⎜   ↳ Macintosh mouse button emulation          id=10   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint    id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ Power Button                              id=9    [slave  keyboard (3)]
[root@hoge ~]# xinput set-float-prop 6 "Device Accel Constant Deceleration" 0.35
[root@hoge ~]# xinput list-props 6
Device 'Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint':
        Device Enabled (150):   1
        Coordinate Transformation Matrix (152): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        Device Accel Profile (278):     0
        Device Accel Constant Deceleration (279):       0.350000
        Device Accel Adaptive Deceleration (280):       1.000000
        Device Accel Velocity Scaling (281):    10.000000
        Device Product ID (282):        6127, 24585
        Device Node (283):      "/dev/input/event4"
        Evdev Axis Inversion (284):     0, 0
        Evdev Axes Swap (286):  0
        Axis Labels (287):      "Rel X" (160), "Rel Y" (161)
        Button Labels (288):    "Button Left" (153), "Button Middle" (154), "Button Right" (155), "Button Wheel Up" (156), "Button Wheel Down" (157), "Button Horiz Wheel Left" (158), "Button Horiz Wheel Right" (159), "Button 3" (273), "Button Extra" (275), "Button Unknown" (269), "Button Back" (276), "Button Task" (277), "Button Unknown" (269), "Button Unknown" (269), "Button Unknown" (269), "Button Unknown" (269), "Button Unknown" (269), "Button Unknown" (269), "Button Unknown" (269), "Button Unknown" (269)
        Evdev Scrolling Distance (289): 0, 0, 0
        Evdev Middle Button Emulation (290):    0
        Evdev Middle Button Timeout (291):      50
        Evdev Third Button Emulation (292):     0
        Evdev Third Button Emulation Timeout (293):     1000
        Evdev Third Button Emulation Button (294):      3
        Evdev Third Button Emulation Threshold (295):   20
        Evdev Wheel Emulation (296):    1
        Evdev Wheel Emulation Axes (297):       6, 7, 4, 5
        Evdev Wheel Emulation Inertia (298):    10
        Evdev Wheel Emulation Timeout (299):    200
        Evdev Wheel Emulation Button (300):     2
        Evdev Drag Lock Buttons (301):  0
[root@hoge ~]# 
わたしの場合は、Device Accel Constant Deceleration を 0.35 に設定することで、十分な軽さになりました。

もう1点、TrackPoint の真ん中ボタンによるスクロールを使うのに、設定が必要でした。
openSUSE ユーザで、先人の方が居られたので、ありがたく写経させてもらいました。設定ファイルのパスだけ、若干異なりますが、内容はそのまま使えました。
[root@hoge ~]# cat /etc/X11/xorg.conf.d/20-thinkpad.conf 
# File is /usr/lib/X11/xorg.conf.d/20-thinkpad.conf
Section "InputClass"
    Identifier "Trackpoint Wheel Emulation"
    MatchProduct "TrackPoint"
    MatchDevicePath "/dev/input/event*"
    Driver "evdev"
    Option "EmulateWheel" "true"
    Option "EmulateWheelButton" "2"
    Option "Emulate3Buttons" "false"
    Option "XAxisMapping" "6 7"
    Option "YAxisMapping" "4 5"
EndSection

55Y9024 キーボードの打ち心地は、十分快適に使えるレベルという感想を持ちましたが、ネットで散見されるように、形状こそ本物の ThinkPad の 7列 キーボードとそっくりですが、やはり別物でした。キートップの印刷品質が低く (雑な感じ) 、タイプした時の感触もだいぶ異なります。いわゆる剛性の差でしょうかね。本物の ThinkPad のほうが重量があり、どっしりとしているから、打ち心地がよく感じるのかも。
しかしながら、この配列はやはり絶妙と思いました。それから、地味にボリューム調整のボタンが便利かもしれません (何も設定しなくても CentOS6 で使えました) 。

2018年6月20日水曜日

CentOS7 の黒いコンソール画面で Caps Lock の LED が光らない

会社のメインマシン用に、東プレの省スペースキーボード R2TLA-JP4-BK を新調し、試し打ちのために、CentOS7 が動作しているマシンに接続しました。
これまでは東プレの旧型省スペースタイプを使っていましたが、新型は今までになかった LED が搭載されており、さっそく Caps Lock で LED 点灯を確かめようとしたのですが。。。
点灯せず(あれ?)。キーを押すと大文字が入力されるので Caps Lock がちゃんと反応はしているようなのですが、なぜか LED が光りませんでした。

これって初期不良?サポートに聞くのは手間だなあなどと思ったのですが、問い合わせる前の切り分けに、別の LED 付フルキーボードを同じマシンに接続してみました。
これで LED が光るようなら、新キーボードの初期不良確定なのですが、なんとそのフルキーボードの LED も光らずでした。フルキーボードは別の CentOS7 マシンに接続していて、そちらでは光ってましたので、マシン環境の違いということになりました。

設定の差分を調べたところ、カーネルコマンドライン vconsole.keymap=jp106 の有無が違ってました。LED が光らなかったマシンにこの設定を入れたところ、コンソール画面で Caps Lock の LED が反応するようになりました。あーよかった。
[root@hoge ~]# vi /etc/default/grub 
...
GRUB_CMDLINE_LINUX="crashkernel=auto vconsole.keymap=jp106"
...
[root@hoge ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
[root@hoge ~]# shutdown -r now
なお、あとで試したら vconsole.keymap=jp106 を指定していなくても、GNOME デスクトップのターミナル等であれば、LED が点灯するようです。
Caps Lock キーなんて、まず使わないわけですが、間違って押した時に LED が光ってすぐ分かるのは利点かなと思います。

いろいろな種類がある東プレキーボードですが、静音タイプは自分としては「何か違う感」があったのと、キー荷重ALL45gが好みなので、R2TLA-JP4-BK(人気薄?)を選択しました。以前、ALL30gのキーボードを使っていたこともあるのですが、自分には軽過ぎました。R2TLA-JP4-BK は、キー刻印が見づらい(黒色に墨)ですが、まったく問題なしです。増田忠先生の練習法は、すばらしいです。かれこれ30年近く前、「ワープロ・パソコンのためのらくらくキーボード練習帳―ブラインド・タッチからワープロ検定まで〈1 ローマ字入力編〉」という本で練習したおかげで、ほとんどキーを見なくても打てるようになりました。おもえば、ブラインドタッチになってから、キーボードにこだわりだしたのでした。速く打てるようになったため、良いキーボードでないと手が痛くて耐えられなくなり。。。

R2TLA-JP4-BK の打ち心地は、かなり気に入りました。ネット上で不評な右上部分のデザインも、色合い(非静音タイプは銀色)のせいか、それほど気になりませんでした。APC は、ちょっと試してみた限りでは、違いが知覚できず。とりあえずは、ノーマル設定(キースイッチ反応位置2.2mm)で利用中です。キーストロークを浅めにできるスペーサーまで付属しますが、キートップを全部とるのが手間なので、試していません。


写真では分かり難いですが、BIOS 設定で電源投入時に Num Lock を on にする設定により、Num Lock の LED を緑色に点灯させています。このキーボードは LED の色も選べるし、輝度を調整できたりもします。写真は輝度を一番低くした状態です。
黄色い S キーは、これまで使っていた 91UBY (NG02Y0) から移植したものです。互換性のない最下段以外を全部移植しようかと思ってましたが、R2TLA-JP4-BK それ自体の美しい佇まいも捨て難く感じ、1ポイントアクセントに留めました。


以上、vconsole.keymap についての備忘録のつもりが、ついつい RealForce のレビューになってしまいました。

2018-11-29追記
せっかく購入した R2TLA-JP4-BK ですが、日本語入力の際に頻繁に使う 変換キー の位置が標準的なものと異なっており、正直使いづらくて自分には耐えられませんでした。このため、メインマシン (Windows PC) での利用は断念して、そのまま Linux サーバで利用しています。RealForce R2 シリーズは、省スペース性が旧シリーズよりも向上している点が良いのに残念です。
人気ブログランキングへ にほんブログ村 IT技術ブログへ