SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|12|
2025|01|02|03|04|05|

2005-03-29(Tue) USBパラレル変換回路、製作開始

  ここ数ヶ月で一番ともいえる、面白ガジェットを手に入れたオイラであるから、全力で走り出してしまうのであった。例のプロッタプリンタのUSB対応改造だ。

  画像の説明

  美品であるコトもありバラしは極力避けようと思っていたが、底面からクセの悪いケーブルが出ており、どーにもジャマなのでバラしてみた。2本のネジを外し、慎重にデッパリ部分をケースから抜いて、取り外す……なるほど、プリンタの機械部分はケース一体なので、制御基板部分だけがポッコリと外れた。ケース内には比較的余裕があり、赤丸で囲んだ部分にある基板を留めているネジあたりは、追加基板を共締めするのにピッタリである。

  画像の説明

  基板を観察すると、モータをゴリゴリと駆動するプリンタだけあって、220uFという比較的大きなコンデンサが付いている……が、ナニかが微妙にシミ出た痕跡があるのが気になるなぁ。コレは交換したほうがヨイかもしれん。220〜470uFの電解コンデンサを次回の部品購入リストに加えておこう。

  他に気になったのは「HD6805V1」と記載のあるデカい石。DatasheetArchiveで調べたら、モトローラの6800系のセカンドソース、つまり日立製の6800というコトが判明した。ただしROM/RAM内蔵のワンチップマイコンタイプで、40pin中32pinまでがI/Oポートというストロングタイプである。オイラ68000系アセンブラの経験があるから、6800系の石を使うのに抵抗はないハズだ(ホントか?)。プログラム組みやすそうだなぁ。フラッシュタイプがあるなら使ってみたいモンである。

  さて、観察はこれくらいにして、パラレルシリアル変換I/Fの開発にかかろう。今回はパラレル側から攻めていく予定を立てる。PICにパラレル通信機能を実装して単体で印刷できるコトを確認してから(以降、イ号作戦と呼称する)、シリアル通信対応(同、ロ号作戦)、USB対応(同、ハ号作戦)と進めていくのだ。

  概ねの計画が決まったところで、トートツだがモルツタイムに突入。今日は「丹沢水系」である。東京近辺でモルツを購入すれば概ねこのタイプのモルツに当たるコトだろう。ぐびぐび……うむ、ここ数日恒例となっている前衛的表現をするならば「途方に暮れるペンギン」な味である。遊園地のコーヒーカップの上で、困ってウロウロするペンギンな感じ。なお、本表現に関してのみ、いかなる質問も受け付けていないのでよろしく。

  画像の説明

  作業再開。やっぱり変換I/Fはケース内に組み込んでしまうのが吉である。となると、できるだけ小さな基板を使う必要がある。前回、ケチって基板を再利用したために、使わずに済んだ基板の切れ端の出番である。最終的にUSB対応するとなれば、USB変換基板とのドッキングは必須であるから、ドッキングエリアを確保しつつも、単独でイ号作戦を遂行できるように配線と部品の配置をBschでデザインする。

  画像の説明

  我ながら「一番最初に基板サイズを決めてしまう」という現在の開発姿勢に疑問を抱かなくもないが、別に今に始まったコトでもないので、信念を持ってこの道をゆくのである。

  ユニバーサル基板の切れ端は意外と便利である。必要に迫られて基板を切った際の残りの切れ端でも、なんとか詰め込もうと考えれば、意外と詰め込めてしまうものだ。しかし基板を切るのが面倒なのがいけない。EAGLEでユニバーサル基板をデザインし、細かく面付けするようOLIMEXに発注してしまおうか。追加のドリル代がエラいコトになりそうだ……それ以前にイヤがらせと受け取られそうではあるが。

  今回使用するPICマイコンは16F648A。パラレル通信を実現するだけで10本のピンが必要となるので12F629では不足。16F819ではUSARTモジュールが付いてないので不適。USARTモジュールは使ったコトがないので不安だが、多分使えばラクできるのだろう。ダメなら以前に自分で書いたヤツ使えばイイし。

  しかし、今回の回路はなんの工夫もない直結配線ばかりであった。セントロニクス仕様のホストを作るのって、なんにも面倒なコトはないんだな。

  画像の説明

  夜中にゴソゴソと部品集め。例のFT232BM専用ピッチ変換基板は、当面はUSBポートを通じてI/Fの稼動電力を供給するためだけに使う。一方でプリンタの稼動電力は当面はACアダプタから供給する。ノートPCのUSBポートから800mAはチト無謀な気がするからだ。最近は2ポートを使って500mA x 2の電力を引き出すUSBケーブルが流行っているが、ウチにあるノートPCは2台ともロートルなので、2台ともUSBポートがひとつしか付いていない。2台が力を合わせればなんとかなるが、根本的になんか違う気がするのでそれは却下。

  ついさっきBschを使って配線と部品の配置を周到かつ綿密に計画したのに関わらず、基板上に部品を仮配置してみたら縦が一列足りないコトに気づいた。急遽、PICの位置をズラして対応することに……アホかオレは。明日はサクサクハンダ付けして、可能ならばイ号作戦の完遂までもっていきたいトコロである。では、就寝ッ!!


2006-03-29(Wed) WBEL4 in coLinux成功!!

  さて、実はアドバンスド大戦略にうつつを抜かしつつも、以前からサッパリ動かすコトのできなかった、White Box Enterprise Linux 4(以下、WBEL4)の、coLinux環境へのインストールはチョロチョロと進めていたりする(仕事中に浮いた時間を探しては……)。

  WBEL4はいわゆるRHEL4のクローンである。内容はほとんど同じ。よって、RHELのエクスペリメンタルバージョンであるFedoraとも親戚関係にある。だから「coLinux Fedora」なんてググってインストール方法を模索したりもしたのだが、見つかるのは決まって「本家のFedora-HowTOというWiki」で、コイツは熟読してもどーもよくわからんのだ。

  だが、試行錯誤の末、どうにかこうにかインストールして使えるトコまで持ってきたので、一応ここにインストール方法をメモっておく。

  まずは、別途用意したノートPCにWBEL4をインストールする。

・WBEL4のインストールCDでブート
・linux nofb でスタート
・CD Found で Skip
・Welcome で Next
・Language Selection で Japanese(日本語) で Next
・キーボード設定 で Japanese で 次
・アップグレードの検証 が出た場合 インストール で 次
・インストールの種類 Server で 次
・ディスクパーティションの設定 で Disk Druid で 次
・マウントポイント /、ファイルシステムタイプ ext3、容量 2008MB で OK、次
・ブートローダーの設定 で 次
・ネットワークの設定 で 編集、DHCP オフ、IPアドレス 192.168.0.4、ネットマスク 255.255.255.0 で OK
 手動設定、ホスト名 wbel4-co、ゲートウェイ 192.168.0.1、1番目のDNS 192.168.0.1 で 次
・ファイヤーウォール設定 で 有効にする、すべてチェック、SELinux 無効 で 次
・追加の言語サポート で 次
・タイムゾーンの選択 で 次
・Rootパスワードを設定 で 適当に設定して 次
・パッケージインストールのデフォルト で カスタマイズ で 次
・パッケージグループの選択 で エディタ、テキストベースのインターネット、Webサーバ、メールサーバ、Windowsファイルサーバ、DNSネームサーバ、FTPサーバ、ネットワークサーバ、開発ツール、レガシーソフトウェアーの開発 を選択 ネットワークサーバ の中の dhcp を チェック 1,428M で 次
・インストール準備完了 で 次、続行
・インストール完了、再起動
・実際に一度再起動する(sshのカギを作るため)
・rootでログイン、shutdown -h now で、一度終了する

  次に、そのノートPC上でWBEL4のインストール内容をちょっとイジった後、インストールイメージを抜き出す(私の場合はUSB接続の外付けHDDに書き出した)。

・KNOPPIX(1CD Linux)でブート、端末画面を開く
・まずはcoLinux起動時にデバイスが足りずに止まってしまう問題に対処する。
$ su -
# mkdir wbel4
# mount /dev/hda5 wbel4
# mknod -m 600 wbel4/dev/console c 5 1
# mknod -m 666 wbel4/dev/null c 1 3
# mknod -m 666 wbel4/dev/zero c 1 5
・次にデバイスが正しく追加されない問題、デバイス認識関係の処理で止まってしまう問題に対処する。
# cp -a wbel4/sbin/start_udev wbel4/sbin/start_udev.org
# vi wbel4/sbin/start_udev
make_extra_nodes ルーチンの最後に
for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do mknod $udev_root/cobd$i b 117 $i; done
mknod -m 666 $udev_root/ptmx c 5 2
を追加する。ファイル末尾付近の
scsi_replay、ide_scan、/sbin/udevstart
の行はコメントアウト
・USB接続の外付けHDDを接続、dmesgしてデバイスを調べれば/dev/sda1あたりのはず
・マウントしてWBEL4のインストールイメージを書き出す。
# mkdir usbhdd
# mount -t vfat /dev/sda1 usbhdd
# umount wbel4
# dd if=/dev/hda5 of=usbhdd/root_fs.wb4
※USB1.1しか対応してない母艦だったので、1時間強かかった
# umount usbhdd

  以上で、2GBのWBEL4のインストールイメージを、外付けHDDへ書き出すことに成功した。次は、coLinuxを動かすWindowsマシンにそれをコピーしてcoLinuxを起動する。

・coLinuxの走っているWindowsマシンにコピーする(c:\Program Files\coLinux\wbel4\root_fs.wb4)
・coLinuxの起動設定wbel4.colinux.xmlをdefault.colinux.xmlを元に作る、変更点は以下のとおり(オイラの場合)
13c13
<     <block_device index="0" path="\DosDevices\c:\Program Files\coLinux\root_fs" enabled="true" />
---
>     <block_device  index="0" path="\DosDevices\c:\Program Files\coLinux\wbel4\root_fs.wb4" enabled="true" />
19,20c19,28
<     <!-- block_device index="1" path="\DosDevices\c:\coLinux\swap_device" enabled="true" / -->
---
>     <block_device  index="1" path="\DosDevices\c:\Program Files\coLinux\wbel4\swap_fs.wb4" enabled="true" />
>     <block_device  index="2" path="\DosDevices\c:\Program Files\coLinux\wbel4\work_fs.wb4" enabled="true" />
>     <block_device  index="3" path="\DosDevices\c:\Program Files\coLinux\wbel4\manifestdestiny-source-1.iso" enabled="true" />
>     <block_device  index="4" path="\DosDevices\c:\Program Files\coLinux\wbel4\manifestdestiny-source-2.iso" enabled="true" />
>     <block_device  index="5" path="\DosDevices\c:\Program Files\coLinux\wbel4\manifestdestiny-source-3.iso" enabled="true" />
>     <block_device  index="6" path="\DosDevices\c:\Program Files\coLinux\wbel4\manifestdestiny-source-4.iso" enabled="true" />
>     <block_device  index="7" path="\DosDevices\c:\Program Files\coLinux\wbel4\manifestdestiny-binary-i386-1.iso" enabled="true" />
>     <block_device  index="8" path="\DosDevices\c:\Program Files\coLinux\wbel4\manifestdestiny-binary-i386-2.iso" enabled="true" />
>     <block_device  index="9" path="\DosDevices\c:\Program Files\coLinux\wbel4\manifestdestiny-binary-i386-3.iso" enabled="true" />
>     <block_device index="10" path="\DosDevices\c:\Program Files\coLinux\wbel4\manifestdestiny-binary-i386-4.iso" enabled="true" />
26c34
<     <bootparams>root=/dev/cobd0</bootparams>
---
>     <bootparams>root=/dev/cobd0 ro</bootparams>
40c48
<     <network index="0" type="tap" />
---
>     <network index="0" type="tap" name="coLinux40" />

  とりあえずの起動に重要なのは「block_device index="0"」の行と「<bootparams>」に「ro」を足すことだけだ。でもって、イザ起動!!

$ ./colinux-daemon.exe -c wbel4.colinux.xml

  無事に起動しただろうか?

  結局、ハマったのはudevという、RHEL4から新しく追加になったデバイス自動管理機構のせいであった。一般にLinuxの場合、/devの下に強烈に多くのデバイスファイルが並んでいるが、接続もしてないし、使いもしないのになんでこうも多く並んでいるのだろうと疑問に思ったことはないだろうか? それを必要なものだけに抑えたい、しかも自動的に……というのがudevの役割だ。だから、RHEL4では起動開始時点では/devの下はカラッポで、起動してから必要なデバイスファイルが作られる……のだが、どーもcoLinux環境ではうまく動かないっぽい。で、それをフォローしてやるのが、上記の/sbin/start_udevファイルへの記述の追加だ(udevの思想を無視したムリムリの追加だが、動けばいいのだ!!)。

  ちなみにオイラが使っているcoLinuxのバージョンは、職場のPCが「colinux-0.6.2」、モバイルPCが「colinux20050524(0.6.3-pre13)」。コイツらのベースカーネルは各々2.6.10と2.6.11となっており、WBEL4のカーネル2.6.9と非常に近くとても相性がいい。オイラはこの環境でいままでWBEL3も動かしていたが、WBEL3のカーネルは2.4系列であり、モジュール関係が根こそぎ動かなくてヘコんでいたが、今度はバッチリである。

  画像の説明

  さて、次回は起動したばかりのWBEL4をそこそこ使える状態にしつつ、WBEL3と同時に起動してWBEL3とWBEL4の間で通信なんかしちゃってみたい。ほんじゃまた。


2014-03-29(Sat) さくらのVPSを借りて、今、仮想の、デスクトップ!

  ここのところ、艦こればかりやっていて、強いストレスを感じている毎日である。

  どうも、オイラは「ぼぉーとゲームしてるのは性に合いませんね」というか、なんというか。のんびりしていると、むしろ「何かせねば」という強迫観念に襲われてストレスを感じる性格なのである。まぁ、別に「何か」といっても、さほどスゴいコトをやるわけでも、さほどスゴいモノを作るわけでもないのだけれどもさ。

  しかし、前から作ってみたかった自分用のアプリがあって、それがある程度のカタチになってきたこともあり、思い切って、それ用に、もひとつ「さくらのVPS」を借りてみることにしたのである。

  で、イザ借りてみると、ちょっと前から、サーバの設置場所を選べるようになったとは聞いていたが、任意のISOイメージによるOSインストールもできるようになっていた。こりゃ、死角なしだな。今回は、ちょっと高いが、2Gプランを借りてみよう。ほぼデータを失う可能性がないストレージが200GB。高いといっても月に1500円弱だし、携帯電話の月額に比べりゃ安いもんだ。

  前から借りていた1GプランのVPSは、東京にあるのだと思っていたが、どうも大阪だったらしい。今回は石狩をチョイス。レイテンシは高くなるだろうが、データの保全性を考えると場所は離した方がいい。

  インストールするOSは、せっかくなので最新のFedora20。どうも、ちょっとMINT15を味見したりしてるうちに、かなり様相が変わってしまっているらしい。もうすぐRHEL7が仕事の主戦場になることだし、多少は感覚を養っておかねば。

  そもそも、Fedoraから離れてみようかと思ってしまった理由のひとつに、GNOME3のイマイチさがあったわけだが、いつの間にかFedoraでもMATEが使えるようになっているのは本当に助かる。ほとんどブラウザと端末作業ばかりのオイラだが、GNOME3はウィンドウを切り替えるだけでも苦痛だったんだよなぁ。

  さくらのサイトから、ISOイメージインストールを呼び出し、sftpでFedora-20-x86_64-netinst.isoをアップロードする。systemdやfirewalldにとまどいつつ、手探りで「よく通る場所をけもの道に」しつつ、openvpnを導入……と、ふと、ここでなにげに「xrdpを導入して、リモートデスクトップ環境を構築」してみるのも楽しいのではないか、と思いついてしまった。

  普段使いのマシンがAtomなこともあり、画面の反応はイマイチながらも、処理はサクサク、てなことにならんものか、という期待である。

  ところが、軽い気持ちでrdpを導入したが……接続はされるもののデスクトップ画面が現れない……なんじゃこりゃ。んじゃ、元祖のvncならどうか……こっちもダメ。うーむ、オイラ、GUI関係の仕組みについては弱いんだよな。結局、あちらこちらの情報を元に、問題の根っこが「デスクトップ環境にMATEを使っていること」であることを突き止めた。

  デフォルトとはいえ、どうせみんなGNOME3なんか使わずにMATEの一択なんだろ、と思っていたのだが、こんなマイナバグが平気で残っているところをみると、そうでもないのか……オイラはマイノリティなLinux使いの中でも、さらにマイノリティなMATE使いなのか……というわけで、以下が、正しいvncの設定方法である。

・vncサーバ導入
# yum install tigervnc-server
・起動スクリプトを配置すべき場所だけ確認
# systemctl enable vncserver@:1.service
# rm /etc/systemd/system/multi-user.target.wants/vncserver@:1.service
・起動スクリプトを配置
# cp /usr/lib/systemd/system/vncserver@.service /etc/systemd/system/multi-user.target.wants/vncserver@:1.service
・利用ユーザを設定
# vi /etc/systemd/system/multi-user.target.wants/vncserver@\:1.service 
# diff /usr/lib/systemd/system/vncserver@.service /etc/systemd/system/multi-user.target.wants/vncserver@:1.service
40,41c40,41
< ExecStart=/sbin/runuser -l  -c "/usr/bin/vncserver %i"
< PIDFile=/home//.vnc/%H%i.pid
---
> ExecStart=/sbin/runuser -l user -c "/usr/bin/vncserver %i"
> PIDFile=/home/user/.vnc/%H%i.pid
・利用ユーザにスイッチ
# su - uesr
・vncパスワードを設定
$ vncpasswd
・デスクトップ環境の起動設定(MATEの場合はこれがキモ!)
$ vi .Xclients
$ cat .Xclients 
#!/bin/bash
exec mate-session
$ chmod 755 .Xclients
$ exit
# systemctl daemon-reload
・vncサーバ起動
# systemctl start vncserver@:1.service

  あとは手元のマシンからvncクライアントで接続だ。

$ vncviewer 10.8.0.x:1

  ちなみに、上記の.Xclientsの設定が「vncでMATEのデスクトップ画面が現れない問題」への対処なのだが、これは、以下のような起動シーケンス(※)に対する処置である。

・vncサービス起動
・/home/user/.vnc/xstartupの実行……の中で、
・/etc/X11/xinit/xinitrcがあれば実行……の中で、
・/home/user/.Xclientsがあれば実行……が、ない(※)ので、
・/etc/X11/xinit/Xclientsがあれば実行……の中で、
・GNOMEかKDEならデスクトップセッション起動
・おぃ……ちょっとMATE?

  一方で、xrdpの設定方法は以下だけ。

・rdpサーバ導入
# yum install xrdp
・rdpサーバ起動
# systemctl start xrdp

  xrdpの場合は、クライアントからのxrdp接続のあと、/etc/xrdp/startwm.shの実行の中で、/etc/X11/xinit/xinitrcが実行され、上記と同じルートを通るので、vnc設定の中で行った.Xclientsの設定により、こちらの問題も同時に解決されるのであった。

  あとは手元のマシンからrdpクライアントで接続。

$ rdesktop 10.8.0.x

  今回の試行を行う前、rdpはプロトコル上、サウンドも扱えることを知っていたので、ちょっと期待していたのだが、実はrdpは、ほぼvncのラッパーに過ぎず(実際、内部でvncを起動して通信している)、そのような機能はないことに気づいた。

  うーむ、それではリモートデスクトップ環境として、いかにも片手落ちではないか……と、ここで思いついてしまった。確か、pulseaudioにはリモートでサウンドデバイスを扱える機能があったような……というわけで、以下が、pulseaudioの設定方法である。

・デスクトップマシン(音声受信→スピーカー)側の設定
・一般ユーザでログインしてから
$ cd .config/pulse
$ cp /etc/pulse/default.pa .
$ vi default.pa 
・外部からのtcp接続を受け入れる設定
$ diff /etc/pulse/default.pa default.pa 
85c85
< #load-module module-native-protocol-tcp
---
> load-module module-native-protocol-tcp auth-anonymous=1
・デスクトップからログアウト、再度ログインすると、ポート4713が開かれる
$ netstat -anp | grep pulse
tcp        0      0 0.0.0.0:4713            0.0.0.0:*               LISTEN      xxxx/pulseaudio 
tcp6       0      0 :::4713                 :::*                    LISTEN      xxxx/pulseaudio 
 
・リモート(アプリ→音声送信)側の設定
・一般ユーザでログインしてから
$ cd .config/pulse/
$ cp /etc/pulse/client.conf .
$ vi client.conf 
・デスクトップマシンへtcp接続するための設定
$ diff /etc/pulse/client.conf client.conf 
24c24
< ; default-server =
---
> default-server = 192.168.0.x
・vncサーバを立ち上げると、ポート4713へ接続される
# systemctl start vncserver@:1.service
# netstat -anp | grep 4713
tcp        0      0 10.8.0.x:xxxxx          192.168.0.x:4713        ESTABLISHED xxxxx/mate-volume-c 
tcp        0      0 10.8.0.x:xxxxx          192.168.0.x:4713        ESTABLISHED xxxxx/mate-settings

  あとは手元のマシンからvncクライアントで接続。

$ vncviewer 10.8.0.x:1

  vncクライアント上からサウンドを再生すれば、手元のマシンから音が出る。もちろん、vncクライアント側のボリュームアイコンによる音量操作も可能だ。

# yum install sox
$ play /usr/share/sounds/alsa/Front_Center.wav

  一方で、xrdpサーバの場合は、即座にポート4713に接続されたりはしない。

# systemctl start xrdp.service
・手元のマシンからrdpクライアントで接続してから、ポート4713へ接続される
$ rdesktop 10.8.0.x
# netstat -anp | grep 4713
tcp        0      0 10.8.0.x:xxxxx          192.168.0.x:4713        ESTABLISHED xxxxx/mate-volume-c 
tcp        0      0 10.8.0.x:xxxxx          192.168.0.x:4713        ESTABLISHED xxxxx/mate-settings

  あとは、flashプラグインを導入して……

# rpm -ivh flash-plugin-11.2.202.346-release.x86_64.rpm 

  画像の説明

  ……って、結局、艦これやるんかーいっ!

  ちなみに、サウンドも出るようになったものの、画面も音も飛びまくりで、快適なプレイ環境にはほど遠いということだけは言っておく……あ、もしかしたら、まだVPSが試用中で通信速度が制限されているから、かも?

  4/5追記。やはり、通信速度が制限されているからだった。音飛びは完全になくなり、画面はコマ送りではあるが、CPUパワーが高いこともあり、プレイ自体はサクサク。イマドキのPCで遊べば、こんなにスムーズなんだ。こりゃ、マジで実用的かも。


2015-03-29(Sun) 駆け抜けてゆく真っ赤なバギー

  画像の説明