2017年7月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

Amazonウィジェット

  • miniPC
  • 最近買った本
  • Raspberry Pi
  • クアッドコプター
  • 書籍ランキング

AdSense

  • 広告
無料ブログはココログ

Linux

2015年10月 5日 (月)

LIVA モニタなしで起動させようとしてGRUBをいじったら、モニタ起動が二度と出来なくなった件

miniPC LIVAにubuntu 14.04を入れて色々楽しく遊んでいたのであるが、普通にPCと使っている分に飽きてしまって、raspberry piのようにSSHで操作して遠隔操作したりしようと思った。そうなるとディスプレイをつながないと起動できないのはなんとも不便なので、ディスプレイなしで起動してくれるような設定を調べて試してみた。

livaをモニターなしで起動する。

GRUBでOSを選択する画面が出てきて、エンターを押さないと起動できない。

そこでGRUBの設定を変えればよいことがわかった。

先に結論を報告しておくと、

GRUBの書き換えは非常にリスクが高い
二度とGUIでログインできなくなる危険性を持っている。
知識が足らず、いままで一度も復活できたことがないので、再インストール決定(著者の場合は・・・)。

GRUBを書き換えてdisplayを表示させなくした場合、
その設定が保存されて、二度とxserverとのリンクが復活しなくなる。

方法は簡単。このファイルを直接編集する。

# sudo vi /etc/default/grub


GRUBファイルの中身はこんな感じ

GRUB_DEFAULT=0
GRUB_RECORDFAIL_TIMEOUT=10
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="text"
GRUB_CMDLINE_LINUX=""
GRUB_DISABLE_OS_PROBER=true ←追記

上記に変更したら、GRUBを反映させる。
update-grub
を実行して完了。

これで二度とXserverは立ち上がらなくなります(T T)
結局あきらめて普通のデスクトップPCとして使っています。
小さくて軽くてポータブルバッテリーでも動くので
何かの装置に組み込んで使えると思ったのにーー。

Linuxマシン同士のSSHの使い方

WindowsからTeraTermを使ってraspberry piにSSHログインする機会が多かったのだが、Linuxマシンを使う機会が増えてからLinuxマシンからraspberry piにログインしなければならないことがあった。ubuntuをインストールしたminiPCのLIVAからraspberry pi2にSSHログインしようとしたら、確かに合っているパスワードを入力しているにも関わらず、パスワードではじかれてしまったのだ。

TeraTermはかなりの作業を自動で行ってくれていたのである。Windowsからteratermを使ってやる分にはログインできるが、linuxからlinuxへのログインができない。teratermでSSHをやるときに出てくる、ASCIIアートみたいな絵で表示されるRSAというやつがポイントのようだ。linuxのSSHではコマンドでその辺を指定してやらねばならない。

1.
クライアント(ログインする側)で、鍵を生成する。

鍵の名前 と、鍵の名前.pub

の2個の鍵が作られる。.pubのほうが公開鍵。

2.

公開鍵をサーバー(ログインされる側)に配置する。

という場所に置かなければならないようなのだが、RPI2のubuntu(ARM)にはなかった。仕方がないのでmkdirで勝手に同じ名前のフォルダを作って、公開鍵を入れておいた。

作業をするときは、Windowsで両方のHOSTにteratermでSSHログインし、そこからwinSCPを使ってファイルを移動させると簡単だった。

3.

SSH起動のコマンド

ssh -l [ユーザ名] -i [秘密鍵のパス] [サーバBのホスト名]

コマンドが結構長いし都度打ち込むのは手間なので、
適当にスクリプトにして残しておいたほうがよい。

2014年10月25日 (土)

LIVAのWifiをUbuntu(12.04)でも使えるようにする。

こんどはLIVAに内臓されているWifiの有効化。
せっかくアンテナを組み立てたのにUbuntuを入れただけでは使えないのだ。

※LIVA はamazonで買えます。
※多分最新のUbuntu(14.**?)でも同じ作業で動くと思うが一応タイトルにver記載。



まず、
ECSのLIVAのサイトのサポートのページから「LIVA Driver for Ubuntu」にある「Ubuntu_1.0M.zip」をダウンロードする。zipファイルを適当なディレクトリに展開する。

TATおじさんのモバイル日記を参考に、
一通りやってみたのだが、筆者の環境では上手くいかなかった。

以下大まかな抜粋

1.LANのフォルダを展開する。(WLANもあるけどいいのかな・・・。)
2.autorun.shを実行して、apt-getでfirmware-b43-installerを実行。
3./etc/modprobe.d/blacklist.confでblacklist bcm43xxの行をコメントアウト。
4.dmesg | grep brcmfmac と入力すると、
  ubuntu起動時のファームウェアエラーが表示される。

  

これを手がかりに、どんなファームウェアのファイル名を読み込もうとしているかを調べる。
  該当行の中に下記のようなメッセージがあれば、そのファイルを読もうとしてエラーしていることがわかる。

  ~ fail to request firmware ****(ファイル名) ~

  この情報のおかげで、どうやったらデバイス認識にミスするのかが理解できた。

5.次に、brcmfmac-sdio.binとbrcmfmac-sdio.txtの名前を、
  4で見た、読み込み対象としているファイルの名前に書き換えてやることで、
  ubuntuの起動プログラムが読めるようにする。
  ところがbrcmfmac-sdio.txtというファイルはbrcmディレクトリには、無いぞ・・・。

6.とりあえず存在しているbrcmfmac-sdio.binだけファイル名を書き換えて
  sudo rebootした。

すると、同じステップで失敗していた。



以下、筆者がやってみたこと。

今度はUbuntu_1.0M.zipの展開から得られた、WLANの中身を使ってみることにした。
展開すると、
brcmfmac-sdio.binと、brcmfmac-sdio.txt。
プラス、説明がさらっと書いてあるテキストファイルがでてくる。

このテキストファイルに、
1./lib/firmware/brcm にファイルをコピーせい。
2.再起動!

とだけ書いてある。

あと、なにやらUbuntuのQ&Aページへのリンクが書いてあるが、ちょっと難しい。

このテキストファイルの1.の通りにファイルをコピーし、もう一度TATおじさんの手順4,5,6を試したところ、上手くいくことがわかった。

再起動後のifconfigでwlan0が表示されていれば、認識はOKだ。

------------

あとは普通のWifi設定と同じ。WindowsのようなGUIから設定できる。
Ubuntuメニューの設定からネットワーク設定を選んで、
SSIDを編集するだけ。


Ssid2

この画面が、接続に成功したときの様子。
接続と表示が変わり、DHCPで割り当てられたIPアドレスが表示される。



Ssid1

ここでパスワードを設定する。
1.セキュリティはWPAを選ぶ。
2.パスワードはWLI-UC-GNMの側で設定したものを入れる。
IPの割り当てがDHCPなら、いじる必要は無い。

Ssid3

Ssid4



念のため母艦PCにつけていた、Wifiドングル:WLI-UC-GNMの設定もメモ。

Buffalo1

これで母艦PCからWifiでもログインが可能になった。

LIVAにリモートログインする。VNCサーバのインストール

LIVA 活用編
リモートデスクトップを準備する。

やろうとしていること。
--------------------
・メインPC側
VNCビューワーを入れる。

・LinuxPC側
x11vncを使う。
とあるエンジニアの備忘logさんのページを参考にインストール。

手順どおりにやればすんなり入った。
ここではポート番号:5900に設定している。
RaspberryPiに入れたときは5901で設定していたので、一緒にしてしまったほうがわかりやすいかもしれない。

これをインストールしておけばキーボードを差し替えずとも、VNCビューワの窓をアクティブにするだけでOK。

次やるならこういうのも面白い。
タブレットやスマホをディスプレイとして利用可能。(外部サイトへLINK)
アプリをインストールするだけ



LIVAのUbuntuセットアップ(12.04)

ゆくゆくはLIVAをロボットの背に乗せて使いたいと思い、ROS(robot operating system)のインストールで実績のあるUbuntu12.04を入れることにした。

USB接続のDVDドライブがある人はメディアに焼いてインストールできるが、
そんな出番の少ないもの買うのは勿体無いので、初USBインストールに挑戦と相成った。

上手くいったパターンを記録しておく。

1.ここで64ビット版のUbuntu ISOイメージをダウンロードする。

  色々バージョンが出てくるのでややこしいのであるが、
  このファイル→ ubuntu-12.04.5-desktop-amd64.iso

alternate版は軽量カスタマイズ版で、インストールする項目を編集できる。
desktop版でないと、難しいこと聞かれるので怖くって前に進めない。
desktop版はUSBを入れて電源ONした後、お試し起動(PCに何も書き込まずにUbuntuを使う)と、インストール(通常のインストール)の選択ができる。

2.RUFUSというフリーソフトを入れる。
  こいつでUEFIというのに対応したインストーラをUSBに書き込む

MBR UEFIコンピュータのためにパーティション構成
というのが大事らしく、USBからブートさせるためにUEFIというのがキーになっているらしい。

3.Ubuntuインストーラを書いたUSBを刺して電源ONするだけ。
  UEFIで起動するのでBIOSで何か設定する必要は全くなかった。

※手順2で別なツールを使ってインストール用USBを作っても、上手くいかない。
 UEFIに対応していないからだ。

※通常のUbuntuインストーラはDVDドライブが付いていることを前提としているので、ドライブが接続されていない限り前に進めない。



---------------------------------------

UEFIってなーに??(DosVパワーレポートへ)
BIOSに代わるPCの標準ファームウェアインターフェース。

WikiPediaの説明が一番わかりやすかった。
EFIブートマネージャーを使えば、OSを選択してロードすることができる。
(引用→)”ブートローダーはファームウェアから自動検出することも可能で、例えばリムーバブル・デバイスからのブートも可能となっている。”
ということだそうな。

MiniPC LIVA を購入

以前から目をつけていた超小型PCベアボーンLIVAのラインナップに、ストレージ64GB版が登場。丁度潮時だとおもいSoftmapオンラインで購入した。

※Amazonでは足付きで売ってる
【オンライン限定ゴム足付属】 ECS 小型ベアボーンPC LIVA MINI PC KIT 64GBモデル LIVA-C0-2G-64G-W

ベアボーンといったら、電源とマザーがケースに乗っていて、残りのパーツをくっ付けて使うものだと思っていたが、このLIVAは単体で買ってきてすぐ使える。(※OSは入ってない)OSをLinuxにすれば、2万円以内でナウいarchitectureのPCが手に入る。
ミニPC組み立てキットといった商品のようだ。

Raspberryではちょっとしんどかった画像処理や、動画の再生がサクサクこなせる。さらにLinux上でシリアルを操作するプログラムさえ組めればArduinoをLIVAにつないでIOを引き出したりできる。色々用途が広がりそうだ。

※Arduinoも種類が増えている。PWMが6chも出せるやつが登場していた。
サインスマート UNO R3 ATmega328P 互換ボード + USBケーブル(Arduino UNO R3 Mega 2560 に対応)オリジナルバージョン


また、
Raspberryは基板むき出しなので、ケースを買うか自分で台をこしらえるかしないといけないが、LIVAは買ったときから瀟洒?なケースに収まっているので、周りに電気パーツを散らかしていても安心して使える。



Img_1115

LIVAの外箱

Img_1116
箱の中身。
あけた瞬間、「これか!?」と叫んでしまうくらい小さい。

LIVAを買う際には、新品のUSBメモリと、3ch以上のUSBハブ。WifiやBlueToothを使う場合はもっと口がついているやつ。を一緒に買っておく。

また、
RaspberryPi同様、リモートログイン環境が整うまでUSBキーボードが必要となる。
インストールの際には大抵、母艦PCでネットを調べ、LIVAにコマンド打ち込みを繰り返すことになるのだが、PCの後ろに回りこんでゴソゴソするのも面倒なので、BlueToothドングルで接続するタイプのキーボードを買っておくと便利だと思った。

BlueToothレシーバと一対一ではなく、複数レシーバを切り替えるタイプがあり、
Logicoolのロータリースイッチで接続先を切り替えるやつに目をつけていた。

LOGICOOL Bluetooth マルチデバイス キーボード ブラック k480

USBケーブルを付け替えてゴソゴソやっていたら、Ubuntuセットアップできてしまったので、結局買わずに終わった。店で実際に触ってみてスイッチと打鍵感がいい感じだったので用途が見つかったら買おうと思う。




番外編用途:
当ブログでちょっとしたブーム?になっている、Raspberry背中のせARdroneであるが、
このLIVAを背中のせて!!、、、というのは重量的にちょっとつらい。

しかしながら、Windows8.1がインストールできるので、普通にVisualStudioとCVdroneをインストールして環境を整え、Drone開発専用PCにするのもいい。
イベント用に持ち運ぶには丁度イイ大きさ。



活用編に続く。

2014年3月11日 (火)

Linuxコマンド "ls"フォルダの中にあるファイルの一覧を、再帰的処理で探す。

140303directoryというフォルダの中に3つのファイルallとdumpとsma。
この中のdump*.csvだけを抜き出してファイルのリストを作りたい。この日付+directoryという名前のフォルダがたくさんある場合、どうやったら一番楽か。

./140303directory:
  all140303.csv
  dump140303.csv
  sma140303.csv

lsコマンドを調べていたら、再帰的にディレクトリの中身を検索するオプション"-R"というのがある。とりあえず、

ls -R ./ *.csv

とやってみたら、最初に

ls: *.csvにアクセスできません。

というエラーが表示されるが、それ以降は

ディレクトリ:
ファイル  ファイル  ファイル

という形式で、ファイルのリストが出てくることがわかった。
しかしこれだと一行に一ファイル名となっていないので、Perlで読むとき面倒くさそうだ。"-l"を使えば1行1ファイル名となるが、余計な情報も入ってしまう。
そこで、"-1"というオプションを使う。これこそが1行に1ファイル名の書式で出力してくれる。

ls -R1 ./ *.csv

とやれば、

ディレクトリ:
ファイル
ファイル
ファイル

の形式になる。

最初のエラーはよくわからないが、ここからgrepを使って必要なファイルだけをリストできそうだ。

ls -R1 ./ *.csv | grep dump*

とやると、上手く抽出できた。
これをそのままパイプ処理でテキストファイルに出してやろう。

ls -R1 ./ *.csv | grep dump* > tame.txt

これで綺麗なリストが完成した。


と、これでよいかと思われたが、落とし穴が。
実際にPerlにファイルを読ませてファイル名を取得しても、そのファイルはフォルダの中にあるので、ファイルを直接開くことができない。
ファイルの相対パスかフルパスをリストする方法が必要だ。

ぱらぱらと調べてみると、"find"コマンドと"pwd"コマンドを組み合わせて使うやり方が載っていた

まずはそのまま真似して実行。

find `pwd` -mindepth 1

-mindepth 1
はカレントディレクトリを検索対象から除くということ。


するとすべてのファイルのフルパスが表示される。
ここから、ほしいファイルのフルパスだけを選んでこればよい。

find `pwd` -mindepth 1 *.csv
とすればよいのかと思ったが、これはエラーが出た。

find `pwd` -mindepth 1 *.csv | grep *.csv
としたら今度は何も出なかった。

正しくはこちら。ちゃんとfindのオプションとして"-name"で指定できるのだった。
dump*.csvで、dumpで始まる、拡張子csvのファイルを指定する。

find `pwd` -mindepth 1 -name dump*.csv

これで完成。


一方、
"find"を使うと、こんな別回答もできる。

find -type f -name dump*.csv

"-type f"でファイルだけをfindの対象にして、それを"-name"で絞り込んでいる。




これをperlのスクリプト内で直接活用できたらもっと面白いのではないかと、"system"を使って上記シェルコマンドから直接配列に入れてみた。

my @filepath = system "find /cygdrive/f/perl/BP2_sampleDumpData/ -type f -name off*.csv";

これで@filepathにファイルパスの要素が入ったと思いきや、上記コマンドを実行した結果が改行なしの変な状態で格納されていることが判明。
というのも、$#filepathでこの配列の要素数がわかるのだが、対象ファイルが3つでも10個でも、なぜか結果は0なのだ。つまり要素が一個しか入っていない。

外部コマンドの実行についてもう少し調べてみると、コマンドの結果をそのままの形、改行コードやら何やらがそのままの形で受け取る方法は、ちょっと違うらしい。

この情報を元に、こんな風に書き換えた。

my $command = 'find /cygdrive/f/perl/BP2_sampleDumpData/ -type f -name off*.csv';
my @filepath_l = qx/$command/;

qx/ /というのが、外部コマンドを実行している部分。

ただし、この方法でも欠点というか注意点がある。@filepathの要素の中身は改行コードが入っている。だからcopy関数などを使いたい場合は、事前に末尾の改行コードを取り除く"chomp"を実行しなければならない。


※すべてcygwin上で実行しました。