eol な Ubuntu をアップグレードする

以前こんなメールを書いたことがあったのですが実際試してみたことはありませんでした.

やったことはありませんが,同様の手順でUbuntu でも11.04/11.10/12.04(lts)
の順にアップグレードして,来月リリースされるであろう14.04(lts) にアップグレードとするといけるかもしれません.
アップグレードは都度source list をold-releases に向けてdist-update することで行けそうな感じがします.
http://old-releases.ubuntu.com/ubuntu/

Disk を整理していてUbuntu 13.04 の入ったDisk が出てきたので実際に試してみました.

を見ると13.04,13.10 はeol なので, 13.04 -> 13.10 -> 14.04 と上げていく必要があるようです.

source.list を書き換えるためにコードネームを確認します.

を見るとこんな感じみたいです.

  • 13.04 -> raring
  • 13.10 -> saucy
  • 14.04 -> trusty

てことで,13.04 の source.list はこんな感じ.

/etc/apt/sources.list

deb http://jp.archive.ubuntu.com/ubuntu/ raring main restricted

先ずは13.04 の最新にするために source.list を先ず http://old-releases.ubuntu.com/ubuntu/ に書き換えます.

deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted

#実際は複数行あると思うので全ての有効な行を書き換えます.以降も同様.

アップデートしてアップグレードします.

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade

次に 13.04 -> 13.10 に上げる為に source.list のコードネームを saucy に書き換えます.

deb http://old-releases.ubuntu.com/ubuntu/ saucy main restricted

アップデートしてアップグレードします……アップデートできません.

http://old-releases.ubuntu.com/ubuntu/dists
の下を見ると saucy がありません.
http://jp.archive.ubuntu.com/ubuntu/dists/ の下を見るとあります.未だ old-re;eases に移動していないようです.eol になってもすぐに移動するとみんな困るから暫くは移動しないんでしょうね.

てことでこんな感じに書き換えて

deb http://jp.archive.ubuntu.com/ubuntu/ saucy main restricted

アップデートしてアップグレードします.

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade

これで 13.10 に上がりました.
14.04 へも同様に上げられるはずですが,せっかくなので do-release-upgrade で上げました.

$ sudo do-release-upgrade

そんなこんなで 14.04 になりました.

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.1 LTS
Release:        14.04
Codename:       trusty

ちなみにどうでもいい環境だからポンポンアップグレードしていますが,本来ならリリースノートなど読んでバックアップ取ってテスト環境で検証してとかしてから行ったほうがいいですね.

uMap で LUG/BUG Map を作ってみる

以前東海道らぐの定例IRCで日本のLUGは今どれだけあるんだろうというような話が出ました.
その時出てきたものを榎さんが以下にまとめてくれていました.
https://enoki.titanpad.com/lug-list

これをuMap で地図に並べてみました.

フルスクリーン表示

ついでに?
http://www.bug.gr.jp/organizantion.html
に書かれていたBUG も一緒に並べてみました.(実際活動してるかは未確認です><)
レイヤーをLUG/BUG に分けているので左上のレイヤー切り替えでどちらか片方のみを表示することも出来ます.

今回はTuxとデーモンくんの画像を使ってみました.デーモンくんは透過画像と差し替えたいところです><

ここ間違ってるよとか,ここにもあるよと行った情報お待ちしていますo




祝OpenStreetMap10周年

8/9はOpenStreetMap 10周年ということで世界各地でパーティが開かれました.

OpenStreetMap 10th Anniversary Birthday party – OpenStreetMap Wiki

このページを見て,地図上にピンを立ててみると楽しいかもしれないと思い日本のパーティ会場をプロットしてみました.

今度の土曜のOSM 10周年パーティ会場をプロット http://t.co/NYCqi01S5R #osmjp

— (「ΦωΦ)「 (@matoken) August 7, 2014


フルスクリーン表示

これを見た @ikiyaさんが世界版やりませんか?ってことで全世界分もプロットしてみることに.

@matoken ありがとうございます! 相談ですがせっかくなのでドンとこのumapで全世界やりませんか? http://t.co/lOh0iuvX7F 

— ikiya (@ikiya) August 7, 2014

@ikiya 浜松反映しましたー.そんなに数多くないので全世界も行けそうですね.今出先なので帰ってから試してみますー

— (「ΦωΦ)「 (@matoken) August 7, 2014





フルスクリーン表示

WikiPage に載せてもらったり,
– OpenStreetMap 10th Anniversary Birthday party – OpenStreetMap Wiki

本家ML に投稿してもらったりしました.
– [OSM-talk] OSM 10th Anniversary Birthday party World Map

初め世界中合わせてもそんなに数ないからすぐだなーとか思っていたのですが,よく見るとアメリカは別ページにまとめられていたり,座標がないところは地名から探したりと結構時間かかっちゃいました.
#実はOSM 使わずにGoogleMap 使っているところも多かった…
uMap はgeojson の読み込みとかもできるのでもし座標データがあれば機械的にマッピングも出来るんですけど今回は手作業でした><



さて,自分はというと台風で外に出られないこともあってサーベイは諦めて桜島の東側から基板地図情報2500をトレースして黒神の辺りまで入力してました.(埋没鳥居で有名かも).早いとこ桜島トレース終わらせたいです.

鹿児島Linux勉強会-第03回-に参加

7/25(金)に鹿児島らぐの鹿児島Linux勉強会に行ってきました.

今回は鹿児島中央駅前のよかプラザでの開催でした.
IMG_20140725_173144
#カタカナでリナックスというのを見るとこないだのLinuxConのスタッフTシャツを思い出します :)

今回はATND での集まりが悪くもしかしたら2人での開催になりそうと思っていたのですが,始まってみると6人でした.
今回は前半はLinux読書会でLinux標準教科書の輪読,後半は発表で私は以下のよな発表を行いました.

その他Vimネタ,Seti@homeネタが披露されました.

自分の発表は最後にしてもらって(スライド完成してなかったorz)
終了時間見ながら発表したのですが,共同購入をしていたRaspberryPi B+ の受渡し時間を考慮してなくて終了後適当なベンチで受け渡しとなってしまいましたorz

IMG_20140723_233409

終了後は有志(4人)で魚とか食べて

IMG_20140725_211837IMG_20140725_213943IMG_20140725_215719IMG_20140725_215823IMG_20140726_002543

その後漫画喫茶に泊まりました.公共交通機関欲しいです
#この日は公共交通機関があっても乗れなかった気はしますが><

IMG_20140726_0314405vD2ZXwC---1

2007年と現在のOSMの比較が出来るSITE

Twitter の #osmjp ハッシュタグで以下の書き込みを見かけました.

2007年のOSMデータといまのデータ。ヨコに並べるとまさに隔世の感、あります。 http://t.co/7OWoJSh1eI #osmjp

— nyampire (@nyampire)

July 26, 2014

九州の辺りをみると真っ白><
Screenshot from 2014-07-30 06:49:31
“OSM Then And Now” http://mvexel.github.io/thenandnow/#8/32.697/130.897

OSM を知ったのは2006年頃だったのですが,当時はこんな感じでデータのインポートもトレースも出来ず基本GPSロガーを使ってマッピングするしか無い頃でした.
これは無理だ><って感じでなかなか手を出してなかったんですが数年でかなり埋まってすごいなと思ったもんでした.もちろん今の時点でもまだまだ建物の情報やPOIも少ないのですが建物は衛星写真や基板地図情報のトレースも出来ますし,スマホが普及してPOIの入力もお手軽に出来るようになって編集方法もすごくお手軽になってます.

そのうち自分のやっている入力方法もまとめてみたいところです.

RaspberryPi の新モデル「RaspberryPi B+」到着

注文

Adarfuit

Raspberry Pi Model B+ 512MB RAM ID: 1914 – $39.95 : Adafruit Industries, Unique & fun DIY electronics and kits
発売日の7/14 に一番安い FIRST-CLASS PACKAGE INTERNATIONAL SERVICE ($12.05) で注文.7/22到着.
台数制限があって1度に注文できるのは1台までだった.

$39.95 + $12.05 = $52.00

RSオンライン(日本)

発売日にRS品版でカートに入れると出てきたが注文できなかった.7/16から正式に注文できるようになった.しかし,イギリスから発送で4営業日掛かるとのこと.日本在庫だと次の日に届くのだけど….
RS-jp だと現在販売しておりませんとなるな

8000円以上注文で送料無料.3台以上で送料無料になる.今回は共同購入として6台注文.
7/16注文.7/22に伝票番号(佐川)がメールで届き,7/23に到着.
恐らく3連休がなければその分早く届いた.

\3,940 + 税 = \4,255.20

外観

外箱,取扱説明書,コネクタの色などが少しずつ違う.

Element14

IMG_20140722_185800IMG_20140722_185837IMG_20140722_185858IMG_20140722_193037IMG_20140722_193055IMG_20140722_194758IMG_20140723_003627IMG_20140723_003640IMG_20140723_003715

RS

IMG_20140723_233300IMG_20140723_233409IMG_20140723_233427IMG_20140723_233434IMG_20140723_233443IMG_20140723_233508IMG_20140723_233517IMG_20140723_233535IMG_20140723_233548

トラブル?

RaspberryPi B でアダプタ経由で動作するmicroSDで起動しなかった
3枚試して2枚NG

  • NG
    ノーブランド 1GB(XMBC)
    Panasonic 1GB(opencocon v8a)
  • OK
    ADATA 16GB(NOOBS Rasbian)

ちなみにNG のCard を再度RaspberryPi B に挿してみると起動した.
Panasonic の1GB の opencocon はdd しなおしてみたけどダメだった.
症状は電源投入時に PWR / ACT 共に点灯 -> ACT消灯.HDMI の画面は反応なし.

相性が厳しくなってる?

#初め試した2枚が連続でダメだったので初期不良かと焦った><

基板ネジ径の変更

IMG_20140724_012554IMG_20140724_012402

B ではM3 のネジが使えていたが,B+ には使えなかった.
確認してみると2.9mm -> 2.75mm に変更になっていた.穴を広げるかM2.5を利用.

raspi-config 20131216-1 簡易説明

raspi-config 20131216-1 簡易説明

前書いたのが古くなっているのでざっと書いてみました.
B+ も出たしそろそろ新しいバージョンが出そうな気がするけど….

┌──────────────────────────────┤ Raspberry Pi Software Configuration Tool (raspi-config) ├──────────────────────────────┐
│ Setup Options                                                                                                         │
│                                                                                                                       │
│    1 Expand Filesystem              Ensures that all of the SD card storage is available to the OS                    │
│    2 Change User Password           Change password for the default user (pi)                                         │
│    3 Enable Boot to Desktop/Scratch Choose whether to boot into a desktop environment, Scratch, or the command-line   │
│    4 Internationalisation Options   Set up language and regional settings to match your location                      │
│    5 Enable Camera                  Enable this Pi to work with the Raspberry Pi Camera                               │
│    6 Add to Rastrack                Add this Pi to the online Raspberry Pi Map (Rastrack)                             │
│    7 Overclock                      Configure overclocking for your Pi                                                │
│    8 Advanced Options               Configure advanced settings                                                       │
│    9 About raspi-config             Information about this configuration tool                                         │
│                                                                                                                       │
│                                                                                                                       │
│                                  <Select>                                  <Finish>                                   │
│                                                                                                                       │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

1 Expand Filesystem

2GB より大きな容量の SD Card を利用した場合 2GB しか利用できないので前領域が利用できるように領域確保します.
NOOBS を使って Rasbian を導入した場合は NOOBS が自動的に面倒を見てくれるので利用する必要はありません.

2 Change User Password

パスワードの変更が出来ます.

3 Enable Boot to Desktop/Scratch Choose whether to boot into a desktop environment, Scratch, or the command-line

起動時にデスクトップ,Scratch,コマンドラインのどれかで起動できるように設定します.規定値はコマンドラインです.

Console Text console, requiring login (default)

テキストコンソールを起動するよう設定します(規定値)

Desktop Log in as user ‘pi’ at the graphical desktop

pi ユーザでデスクトップ環境を自動起動するよう設定します.

Scratch Start the Scratch programming environment upon boot

スクラッチを起動するよう設定します.

4 Internationalisation Options

国際化関連の設定メニューです.

I1 Change Locale

ロケールの設定を行います.日本語は ja_JP.UTF-8 です.
コンソールをメインに使う場合は標準では日本語が表示できないので en_US.UTF-8 にしたほうがいいかもしれません.コンソールで日本語を表示するには後述の fbterm の使い方を参照してください.

コマンドラインで以下のコマンドでも設定可能です.(Debianでの設定方法)
$ sudo dpkg-reconfigure locales

I2 Change Timezone

タイムゾーンの変更が出来ます.
日本時間にする場合は, Asia->Tokyo を選択します.

コマンドラインで以下のコマンドでも設定可能です.(Debianでの設定方法)
$ sudo dpkg-reconfigure tzdata

I3 Change Keyboard Layout

キーボードのキーマップを変更出来ます.
コマンドラインで以下のコマンドでも設定可能です.(Debianでの設定方法)
$ sudo dpkg-reconfigure keyboard-configuration

日本語のキーマップがメニューに出てこない場合は,/etc/default/keyboard を以下のように変更します.

XKBMODEL="jp106"
XKBLAYOUT="jp"

その後以下のコマンドで反映します.
$ sudo /etc/init.d/keyboard-setup restart

5 Enable Camera

RaspberryPi 標準のカメラモジュールを利用できるようにします.USB 経由のカメラなどは Disable のままでOK です.

6 Add to Rastrack

Rastrack (http://rastrack.co.uk) への登録が出来ます.

7 Overclock

オーバークロックが行えます.オーバークロックを行うと RaspberryPi の寿命が縮む可能性があるのに注意してください.また,不安定になる可能性があります.不安定になったら控えめなオーバークロックを試してみてください.
http://elinux.org/RPi_Overclocking に更に解説があります.

8 Advanced Options

A1 Overscan

画面に黒い帯が表示されている場合に改善されます./boot/config.txt で微調整も可能です.(恐らくコンポジット出力のための設定)

A2 Hostname

ホスト名を変更できます.ホスト名は大文字込時を区別しないASCII文字の aからz,数字の 0から9 及びハイフンg利用できます.但しハイフンは先頭と最後には利用できません.

A3 Memory Split

GPU に割り当てるメモリを設定します.16/32/64/128/256MB が指定でき,規定値は128MB です.割り当てたメモリはメインメモリから割り当てられるのでその分メインメモリの割当量が減ります.

A4 SSH

ssh server の有効,無効の設定が出来ます.規定値では有効です.

A5 SPI

SPI の自動読み込みの有効,無効の設定が出来ます.

A6 Audio

オーディオ出力は自動的に切り替わりますが,強制設定が出来ます.

A7 Update

OS のアップデートを行います.
apt-get や aptitude コマンドを実行してもいいです.

9 About raspi-config

このコマンドの説明が表示されます.

Lingr の bot を作ってみた

鹿児島らぐ のLingr room を作ってみたので,そこにML のSubject を流すbot を設置してみました.

こちらにページに作り方が載っています.bot用のAPI があるので楽々です.

bot 登録

以下のページでbot を登録します.

  • “Lingr” http://lingr.com/bot/create

    • Bot id : 任意
    • Callback URL : このURL にroom の内容が飛んできます.その内容から反応したりすることが出来ます.とりあえず最低限HTTP で200 を返すものを用意して指定.

メッセージ受信用のcgi を作成

ひとまず受け答えはしないつもりなのでHTTP 200 を返すだけのScript を用意.

投稿テスト

get だけで投稿できるので試しに投稿してみます,

以下のページで情報が入手できます.

“Lingr” http://lingr.com/developer

bot_verifier は載っていませんが,bot ID とSecret から求められます.
KagolugML_bot と xxxxxxxxxxxxxxxxxxxxxxxxxxx を結合した文字列をsha1 にかけます.

$ echo -n 'KagolugML_botxxxxxxxxxxxxxxxxxxxxxxxxxxx'|sha1sum 
b3c03556dca8dfffb8c509cb709817044c98ad87  -

この場合 b3c03556dca8dfffb8c509cb709817044c98ad87 が bot_verifier です.

  • 投稿先のroom : kagolug
  • bot ID : KagolugML_bot
  • bot_verifier : b3c03556dca8dfffb8c509cb709817044c98ad87

以下のようにアクセスしてみるとroom にメッセージが投稿されました,

w3m -dump ‘http://lingr.com/api/room/say?room=kagolug&bot=KagolugML_bot&text=はろーわーるど&bot_verifier=b3c03556dca8dfffb8c509cb709817044c98ad87‘

メールからLinger に投稿

鹿児島らぐのML だけを登録したメールアドレスを用意.そのアドレスの .forward に以下のSctipt を呼ぶように "|exec /home/mk/bin/ml2lingr.pl" のような感じで設定しておきます,後はメールが届くとこのScriptが呼ばれてRoom に投稿されます.


※bot_verifier はダミーです.

てことでirc のbot とか書くよりずっとお手軽に書けました.
今回は単に投稿するだけですが,cgi でroom のメッセージを解析して反応するとかするとbot らしくなりますね.

gnupgの鍵に新しいメールアドレスを登録

たまにしかやらないのでメモ.

鍵ID 572E53 に matoken@kagolug.org を登録します.

$ gpg --edit-key 572E53
gpg (GnuPG) 1.4.12; Copyright (C) 2012 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Secret key is available.

pub  4096R/572E532C  created: 2010-03-17  expires: never       usage: SC
                     trust: ultimate      validity: ultimate
This key was revoked on 2014-02-11 by RSA key 572E532C K.I.Matohara <matoken@gmail.
com>
sub  2048R/E0FE9E3E  created: 2011-02-23  revoked: 2014-02-11  usage: S
[ultimate] (1). K.I.Matohara <matoken@gmail.com>
[ultimate] (2)  [jpeg image of size 2077]  
[ultimate] (3)  Kenichiro MATOHARA <matohara@gdnewhat-jp.org>

gpg> adduid
Real name: KenichiroMATOHARA
Email address: matoken@kagolug.org
Comment:
You selected this USER-ID:
    "KenichiroMATOHARA <matoken@kagolug.org>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O

You need a passphrase to unlock the secret key for
user: "K.I.Matohara <matoken@gmail.com>"   
4096-bit RSA key, ID 572E532C, created 2010-03-17

gpg: gpg-agent is not available in this session
gpg: Invalid passphrase; please try again ...

You need a passphrase to unlock the secret key for
user: "K.I.Matohara <matoken@gmail.com>"   
4096-bit RSA key, ID 572E532C, created 2010-03-17


pub  4096R/572E532C  created: 2010-03-17  expires: never       usage: SC
                     trust: ultimate      validity: ultimate
This key was revoked on 2014-02-11 by RSA key 572E532C K.I.Matohara <matoken@gmail.com>
sub  2048R/E0FE9E3E  created: 2011-02-23  revoked: 2014-02-11  usage: S
[ultimate] (1). K.I.Matohara <matoken@gmail.com>
[ultimate] (2)  [jpeg image of size 2077]  
[ultimate] (3)  Kenichiro MATOHARA <matohara@gdnewhat-jp.org>
[ unknown] (4)  KenichiroMATOHARA <matoken@kagolug.org>

gpg> 4
pub  4096R/572E532C  created: 2010-03-17  expires: never       usage: SC
                     trust: ultimate      validity: ultimate  
This key was revoked on 2014-02-11 by RSA key 572E532C K.I.Matohara <matoken@gmail.com>
sub  2048R/E0FE9E3E  created: 2011-02-23  revoked: 2014-02-11  usage: S
[ultimate] (1). K.I.Matohara <matoken@gmail.com>
[ultimate] (2)  [jpeg image of size 2077]  
[ultimate] (3)  Kenichiro MATOHARA <matohara@gdnewhat-jp.org>
[ unknown] (4)* KenichiroMATOHARA <matoken@kagolug.org>

gpg> sign
"KenichiroMATOHARA <matoken@kagolug.org>" was already signed by key 572E532C
Nothing to sign with key 572E532C

gpg> list

pub  4096R/572E532C  created: 2010-03-17  expires: never       usage: SC
                     trust: ultimate      validity: ultimate  
This key was revoked on 2014-02-11 by RSA key 572E532C K.I.Matohara <matoken@gmail.com>
sub  2048R/E0FE9E3E  created: 2011-02-23  revoked: 2014-02-11  usage: S
[ultimate] (1). K.I.Matohara <matoken@gmail.com>
[ultimate] (2)  [jpeg image of size 2077]  
[ultimate] (3)  Kenichiro MATOHARA <matohara@gdnewhat-jp.org>
[ unknown] (4)* KenichiroMATOHARA <matoken@kagolug.org>

gpg> save

確認

$ gpg --list-keys kagolug
gpg: checking the trustdb     
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:  12  signed:  55  trust: 0-, 0q, 0n, 0m, 0f, 12u
gpg: depth: 1  valid:  55  signed:  52  trust: 55-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2014-07-20
pub   4096R/572E532C 2010-03-17
uid                  K.I.Matohara <matoken@gmail.com>
uid                  [jpeg image of size 2077]
uid                  Kenichiro MATOHARA <matohara@gdnewhat-jp.org>
uid                  KenichiroMATOHARA <matoken@kagolug.org>

間違ってたら教えてください><

自分のPCにキーロガーを設定する

キーロガー.人のPCに仕掛けるのはまずいけど自分の&自分しか使わないPCで試す分には問題ないだろうということで入れてみてます.

入れているのは以下の logkeys .

導入方法

DebianやUbuntu だとパッケージがあるので logkeys パッケージを導入するだけ.

% sudo apt-get install logkeys

初期設定

/etc/default/logkeys という設定ファイルを設定します.

ENABLED=1
LOGFILE=/home/mk/.logkeys/`/bin/date +%Y%m%d-%H%M%S-$$`

# This should be updated according to your hardware
# Check README.Debian for more info
DEVICE=/dev/input/event0
  • ENABLED : 0 起動しない / 1 起動する
  • LOGFILE : ログファイルの指定
  • DEVICE : キーボードデバイス指定

自動起動してログファイルの設定,ログするキーボードデバイスの指定をします.
ログファイルは他の人から読まれないようにパーミッションを設定しておきましょう.ファイル名は試しに

/home/mk/.logkeys/`/bin/date +%Y%m%d-%H%M%S-$$`

とか書いてみたら行けました.試してみるもんですね.これで起動毎に新しいログファイルが作成されるはずです.
キーボードデバイスは /proc/bus/input/devices を見たり,実際のデバイスを cat してキー入力してみたりして見つけます.
詳細は /usr/share/doc/logkeys/README.Debian に書かれています.

以下の/proc/bus/input/devices では,頭のがkeyboad のようです.

I: Bus=0011 Vendor=0001 Product=0001 Version=ab54
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input0
U: Uniq=
H: Handlers=sysrq kbd event0 
B: PROP=0
B: EV=120013
B: KEY=402000000 3803078f800d001 feffffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=7

I: Bus=0019 Vendor=0000 Product=0005 Version=0000
N: Name="Lid Switch"
P: Phys=PNP0C0D/button/input0
S: Sysfs=/devices/LNXSYSTM:00/device:00/PNP0C0D:00/input/input3
U: Uniq=
H: Handlers=event2 
B: PROP=0
B: EV=21
B: SW=1

I: Bus=0019 Vendor=0000 Product=0003 Version=0000
N: Name="Sleep Button"
P: Phys=PNP0C0E/button/input0
S: Sysfs=/devices/LNXSYSTM:00/device:00/PNP0C0E:00/input/input4
U: Uniq=
H: Handlers=kbd event3 
B: PROP=0
B: EV=3
B: KEY=4000 0 0

I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button"
P: Phys=LNXPWRBN/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXPWRBN:00/input/input5
U: Uniq=
H: Handlers=kbd event4 
B: PROP=0
B: EV=3
B: KEY=10000000000000 0

I: Bus=0010 Vendor=001f Product=0001 Version=0100
N: Name="PC Speaker"
P: Phys=isa0061/input0
S: Sysfs=/devices/platform/pcspkr/input/input6
U: Uniq=
H: Handlers=kbd event5 
B: PROP=0
B: EV=40001
B: SND=6

I: Bus=0019 Vendor=17aa Product=5054 Version=4101
N: Name="ThinkPad Extra Buttons"
P: Phys=thinkpad_acpi/input0
S: Sysfs=/devices/platform/thinkpad_acpi/input/input8
U: Uniq=
H: Handlers=kbd rfkill event6 
B: PROP=0
B: EV=33
B: KEY=18040000 0 10000000000000 0 1501b00102004 c000000001104000 e000000000000 0
B: MSC=10
B: SW=a

I: Bus=0003 Vendor=04f2 Product=b217 Version=0854
N: Name="Integrated Camera"
P: Phys=usb-0000:00:1a.0-1.6/button
S: Sysfs=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/input/input9
U: Uniq=
H: Handlers=kbd event7 
B: PROP=0
B: EV=3
B: KEY=100000 0 0 0

I: Bus=0019 Vendor=0000 Product=0006 Version=0000
N: Name="Video Bus"
P: Phys=LNXVIDEO/video/input0
S: Sysfs=/devices/LNXSYSTM:00/device:00/PNP0A08:00/LNXVIDEO:00/input/input10
U: Uniq=
H: Handlers=kbd event8 
B: PROP=0
B: EV=3
B: KEY=3e000b00000000 0 0 0

I: Bus=0001 Vendor=14f1 Product=506e Version=0001
N: Name="HDA Digital PCBeep"
P: Phys=card0/codec#0/beep0
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/input/input11
U: Uniq=
H: Handlers=kbd event9 
B: PROP=0
B: EV=40001
B: SND=6

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH HDMI/DP,pcm=8"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input18
U: Uniq=
H: Handlers=event10 
B: PROP=0
B: EV=21
B: SW=140

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH HDMI/DP,pcm=7"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input17
U: Uniq=
H: Handlers=event11 
B: PROP=0
B: EV=21
B: SW=140

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH HDMI/DP,pcm=3"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input16
U: Uniq=
H: Handlers=event12 
B: PROP=0
B: EV=21
B: SW=140

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH Headphone"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input15
U: Uniq=
H: Handlers=event13 
B: PROP=0
B: EV=21
B: SW=4

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH Dock Headphone"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input14
U: Uniq=
H: Handlers=event14 
B: PROP=0
B: EV=21
B: SW=4

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH Dock Mic"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input13
U: Uniq=
H: Handlers=event15 
B: PROP=0
B: EV=21
B: SW=10

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH Mic"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input12
U: Uniq=
H: Handlers=event16 
B: PROP=0
B: EV=21
B: SW=10

I: Bus=0011 Vendor=0002 Product=0007 Version=01b1
N: Name="SynPS/2 Synaptics TouchPad"
P: Phys=isa0060/serio1/input0
S: Sysfs=/devices/platform/i8042/serio1/input/input7
U: Uniq=
H: Handlers=mouse0 event17 
B: PROP=5
B: EV=b
B: KEY=e520 10000 0 0 0 0
B: ABS=660800011000003

I: Bus=0003 Vendor=0000 Product=0000 Version=0004
N: Name="ACPI Virtual Keyboard Device"
P: Phys=
S: Sysfs=/devices/virtual/input/input20
U: Uniq=
H: Handlers=sysrq kbd rfkill event18 
B: PROP=0
B: EV=3
B: KEY=ffffffffffffffff ffffffffffffffff ffffffffffffffff fffffffffffffffe

I: Bus=0011 Vendor=0002 Product=000a Version=0000
N: Name="TPPS/2 IBM TrackPoint"
P: Phys=synaptics-pt/serio0/input0
S: Sysfs=/devices/platform/i8042/serio1/serio2/input/input19
U: Uniq=
H: Handlers=mouse1 event19 
B: PROP=0
B: EV=7
B: KEY=70000 0 0 0 0
B: REL=3

I: Bus=0003 Vendor=046d Product=0a29 Version=0111
N: Name="Logicool Logicool Wireless Headset"
P: Phys=usb-0000:00:1d.0-1.1/input3
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.3/0003:046D:0A29.000A/input/input27
U: Uniq=000d44b85a7d
H: Handlers=kbd event1 
B: PROP=0
B: EV=1b
B: KEY=18000 17800000000 8e000000000000 0
B: ABS=ffffff0000000000
B: MSC=10

H: Handlers=sysrq kbd event0 から実際のデバイスは /dev/input/event0 なので,これをcat して何かキーボード入力して反応があるか確認します.当たりのようです.

% sudo cat /dev/input/event0
�w�S��      �w�S��      �w�S��                  �w�S?�w�S?�w�S?p     a�w�SK
�w�SK
�w�SK
�w�w�S��.�w�S��.�w�S��     a�w�S(�^C

実際に使ってみると当たり前ですが入力したものがログファイルに吐かれています.もちろんパスワードなどもそのまま.
日本語入力したものなどはローマ字入力なのでローマ字で記録されています.フィルタにかけると読みやすくなりますね.メタ文字も<lctrl>&ltup><down>のような感じで記録されます.
root で動いているのでユーザを変更しても記録されます.
デバイスを指定しているので,外付けのキーボードを接続すると記録されません.

ちなみにプロセスはこんな感じなので色々丸見えですね.

% ps -ef| grep -i logk
root      1433     1  0  6月10 ?      00:00:25 /usr/bin/logkeys -s -u -d /dev/input/event0 -o /home/mk/.logkeys/20140610-222504-1004

キーロガーへの対策

このlogkeys であれば別のキーボードを使えば回避できます.でも全部のデバイスを記録するソフトウェアキーロガーだと回避できません.OS をLiveCD/USB などで別のものを起動してしまえば回避できます.

ソフトウェアでなく,ハードウェアキーロガーもあります.これはUSB やPS/2 ポートのキーボードの間に取り付けてロギングするものです.OS を変えても回避できません.わかりやすいものはPCの裏を見るだけで何かついてるのですぐわかりますが,キーボードの中やPC 筐体の中に仕込まれると一見しただけではわかりません.
仕込んだロガーを回収してログを回収する必要があるのですが,無線方式のものだと現地に行かなくても無線経由で回収できるので犯人の追跡も難しいです.

ちなみにそんなに特殊なものでなく普通にあちこちで売っています.おまけに安価.

画面を飛ばすものまであります.テンペストを使うよりずっとお手軽で実用的ですね><

ということで,外の端末ではセンシティブな情報は入力しないくらいしか対策は無さそうです.