【Raspberry Pi】リモートデスクトップ接続をxrdpで実現
WindowsPCからラズパイにアクセスさせるため、xrdpを導入します。
1.xrdpのインストール
以下のコマンドを実行。
$ sudo apt-get update
$ sudo apt-get install xrdp
2.日本語キーボードの入力対応
インストールさせたら日本語キーボード対応をさせるため、以下の対応を行う。
$ cd /etc/xrdp/
$ sudo wget http://w.vmeta.jp/temp/km-0411.ini
$ sudo ln -s km-0411.ini km-e0010411.ini
$ sudo ln -s km-0411.ini km-e0200411.ini
$ sudo ln -s km-0411.ini km-e0210411.ini
$ sudo service xrdp restart
3.iptablesの設定変更
ログイン用のポートと画面転送用のポートを開ける必要があります。
ログイン用ポートは/etc/xrdp/配下のxrdp.iniに記載されている。特に変更はしない。
画面転送用ポートはsesman.iniに記載されている。これも変更なしですが、UDPポートになるので注意。
$IPTABLES -A INPUT -p tcp -s $LOCALNET --dport 3389 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -d $LOCALNET --sport 3389 -j ACCEPT
$IPTABLES -A INPUT -p udp -s $LOCALNET --dport 3350 -j ACCEPT
$IPTABLES -A OUTPUT -p udp -d $LOCALNET --sport 3350 -j ACCEPT
$LOCALNETは変数ですが、自宅内で使用しているネットワークアドレス帯域を指定。
4.リモートデスクトップ接続からの接続
スタートメニュー等からリモートデスクトップ接続を実施します。
コンピュータのところにはアクセスするラズパイのIPアドレスかホスト名を。
ラズパイでxrdpが正常に動作していれば、以下の画面が出る。
この時点で、例えば「@」がキーボード通りに入力できない場合は、日本語キーボード対応がちゃんとできていないので注意。
usernameとpasswordはLinuxユーザのそれを使う。
ログインが正常であれば、以下のようにコネクションログが出力され、無事にラズパイのデスクトップ画面が出る。
【Windows】VirtualBoxのvdiのコピー
VirtualBoxで仮想HDDを作った際に、それをコピーして同一環境を別々に動かしたいときですが、普通のコピペでは、コピー先のファイルがVirtualBoxでは読み込めません。UUIDなるものがコピー元と同一になるので、それが原因のようです。
なので、以下のコマンドをコマンドプロンプトで実行します。
実行環境はwin8.1です。
今回はlinuxBeanをコピーします。
cd C:\Program Files\Oracle\VirtualBox
C:\Program Files\Oracle\VirtualBox>VBoxManage clonevdi E:\linuxbean01.vdi E:\linuxbean02.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
これでEドライブ配下にlinuxbean02.vdiができているため、VirtualBoxで読み込めば完了。
【LIVA】【Ubuntu server14.04】Julius-plusで家電を操作
概要
すでに我が家で稼働済みですが、ちゃんとまとめていなかったため、書いておきます。
Juliusについてはこちら
赤外線モジュールについてはこちら
1.Julius-plusの導入
Julius-plusはrti7743さんがJuliusを元に認識向上を向上させたものです。
(詳しくはルールベースjuliusの誤認識対策にSVMを利用してみよう - お前の血は何色だ!! 4)
ありがたいことにソースを展開して頂いてます。
https://github.com/rti7743/rtilabs/tree/master/files/asobiba/juliustest/julius-4.2.1/julius-plus
上記リンク先から一つ上に移動すると、Julius-plusが入っているJulius-4.2.1のセットが置いてあり、ReadMeとしてインストール方法が記載されています。
$ sudo apt-get install flex
$ sudo apt-get install g++
$ sudo apt-get install 'libboost*-dev'
$ sudo apt-get install libboost-thread-dev
$ sudo apt-get install binutils-dev
$ sudo apt-get install libboost-system-dev
$ sudo apt-get install libasound2-dev
$ ./configure --with-mictype=alsa
$ make
$ cd julius-plus
$ make$ ./julius-plus
(略)
マイクで喋ってください。エンターキーを押すと、プログラムを終了します。
----コマンド----(略)
<<< please speak >>>
音声入力状態になります。
2.Julius-plusを自分の環境に合わせる
音声入力で家電を操るには、以前のエントリーでも書いたとおり赤外線学習リモコンを利用します。
そのため、Julius-plusのソースを弄ります。
といってもいじるソースファイルは3つだけです。
①JuliusPlus.cpp
JuliusPlusメソッドに、Julius-plus起動時のメニューが記載されています。ここの記載自体はユーザ入力補助の表示なので、実際いじらなくても問題なかったりしますが、一応やりましょう。
②testmic.jconf
このファイルはJulius-plus起動時のオプションが記載されています。
私の環境では「-nostrip」を設定しておくと都合がいいので、追記しておきます。
詳しくは→【LIVA】【Ubuntu server14.04】Juliusを使いたい(Juliusセッティング完了編)
③main.cpp
肝になるファイルです。すでにテンプレがあると思いますが、認識させたい文言とそれに対応する動作(処理)を記載します。
サンプルとして私の場合は以下のようになります。
julius.AddCommandRegexp("しょうめい(きどう|オン|つけて)",CallbackDataStruct([=](){
std::cout << "###RUN>照明をつけます" << std::endl;//irMagicianのコマンドを実行
system("sudo python ~/irmcli/irmcli.py -p -f ~/irmcli/right_light_on.json");
}));julius.AddCommandRegexp("しょうめい(ていし|オフ|けして)",CallbackDataStruct([=](){
std::cout << "###RUN>照明を消します" << std::endl;//irMagicianのコマンドを実行
system("sudo python ~/irmcli/irmcli.py -p -f ~/irmcli/right_light_off.json");
}));
これだけです。irMagicianのコマンド実行は
【LIVA】【Ubuntu server14.04】赤外線学習リモコンを使う - 技術メモ
にて記載していますが、これを音声入力時に自動実行させるだけです。
その後の処理で音声ファイルを再生し、「照明をつけます」といったものをゆっくりに喋らせると面白いかもしれませんね。
ソースの変更が終わったら、必ずmakeを再実行しましょう。
3.screenコマンドによる仮想画面で常時実行
Julius-plus起動中は他の操作ができません。本体のターミナルならまだしも、Teraterm等で遠隔ログインした場合はTeraterm終了と同時にセッションが切れてしまうため、実行させ続ける事ができません。
バックグラウンドでうまく動かせればよかったのですが、&による実行はうまく動かなかったため、screenで作成した仮想画面上で実行させます。
仮想画面上で動作させていれば、Teratermの接続を切っても裏で動かし続けることができます。
やり方は簡単。
$ screen
説明文が出てきますが、Enter。仮想画面ができます。
この状態でJulius-plusを起動します。起動方法は1の記載のとおりです。
起動が確認できたら仮想画面をデタッチします。
画面上で
[Ctrl+a]を入力後に[d]を入力
[detached from 4777.pts-3.サーバ名
これでJulius-plusを動かしたまま別の操作ができるようになります。
Julius-plusの画面をアタッチ(呼び出す)には
$ screen -ls
There are screens on:
4777.pts-3.サーバ名 (2014年12月06日 22時40分58秒) (Detached)
1 Sockets in /var/run/screen/S-ユーザ名.
$ screen -r 4777
とすればよいです。仮想画面を削除する場合は
[Ctrl+d]を入力
[screen is terminating]
と出て削除しつつ、元の画面に戻ります。
【LIVA】【Ubuntu server14.04】apt-getでエラー発生(post-installationスクリプトエラー)
概要
apt-get でソフトウェアの更新をしようとしたらエラーになりました。(泣)
最近エラーばっかり・・・
$ sudo apt-get upgrade
パッケージリストを読み込んでいます...(略)
... 完了
アップグレードパッケージを検出しています ... 完了
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
1 個のパッケージが完全にインストールまたは削除されていません。
この操作後に追加で 0 B のディスク容量が消費されます。
続行しますか? [Y/n] y
squid3 (3.3.8-1ubuntu6.2) を設定しています ...
/var/lib/dpkg/info/squid3.postinst: 1: /var/lib/dpkg/info/squid3.postinst: cannot open /etc/squid3/squid.conf: No such file
dpkg: error processing package squid3 (--configure):
サブプロセス インストール済みの post-installation スクリプト はエラー終了ステータス 2 を返しました
処理中にエラーが発生しました:
squid3
E: Sub-process /usr/bin/dpkg returned an error code (1)
赤文字のところを見ての通り、すでにおかしい状態。squid3が中途半端な状態でインストールされている?模様。
さてどうする?
参考サイト:フロントが苦手なWEBエンジニアの技術メモ: apt-getのpost-installationスクリプトエラー
上記サイトの通りにやったら解決しました!
①エラーの確認
$ sudo dpkg --audit
以下のパッケージは最初の設定中に問題が発生したため、設定が終了していません。
dpkg --configure <パッケージ> か dselect で設定 (configure) メニューオプションを使って設定作業を再試行しなければなりません:
squid3 Full featured Web Proxy cache (HTTP proxy)
②--configureで実行しろと言われたのでやってみる。
$ sudo dpkg --configure squid3
squid3 (3.3.8-1ubuntu6.2) を設定しています ...
/var/lib/dpkg/info/squid3.postinst: 1: /var/lib/dpkg/info/squid3.postinst: cannot open /etc/squid3/squid.conf: No such file
dpkg: error processing package squid3 (--configure):
サブプロセス インストール済みの post-installation スクリプト はエラー終了ステータス 2 を返しました
処理中にエラーが発生しました:
squid3
③/var/lib/dpkg/info配下の特定のファイルを削除
どうも関連する以下のファイルを削除すればいいようです。今回はsquid3関連を削除。
$ ls | grep squid3
squid3-common.postinst
squid3-common.md5sums
squid3.postinst
squid3.prerm
squid3.preinst
squid3.postrm
squid3.conffiles
squid3.md5sums
squid3-common.list
squid3.list
$ sudo rm -fr squid3.postinst squid3.postrm squid3.prerm
④--configureを再起動
$ sudo dpkg --configure squid3
squid3 (3.3.8-1ubuntu6.2) を設定しています ...
(略)
squid3 は既に最新バージョンです。
で、この後apt-get upgradeも正常にできましたとさ。
【LIVA】【Ubuntu server14.04】visudoで設定をミスってsudo化できなくなった件
概要
crontabでシェルスクリプトを動かす際、シェルスクリプト内のsudoでパスワードを聞かれないようにvisudoを弄る必要があったのでやっていたわけだけど、凡ミスしているのに強制上書きしてしまったがためにsudoができなくなったよ /(^o^)\
$sudo vi aaa.txt
sudo: /etc/sudoers 内 10 行付近で構文解析エラーが発生しました
sudo: no valid sudoers sources found, quitting
sudo: ポリシープラグインを初期化できません
ちなみにやりたかったことはこちらに書いてあります。
特定ユーザー・プログラムにのみcronでのsudoをパスワード無しで許可する設定 | TeraDas-テラダス
さてどうする?
※2022/8/13追記
どうやら以下のコマンドを実行し、パスワードを入力することで変更することが可能なようです。(少なくともUbuntu18.04以降)
pkexec visudo
いろいろ調べた結果、こちらが参考になりました。
ubuntuでsudoの設定変更に失敗したときの対応 - 作業ノート
人によってはこちらも参照になるかも(私の環境では無理でした)
/etc/sudoersがsyntax errorでsudo使えなくなった時の対処法 - tech.log
やることは以下の通りです。
①サーバを再起動
②再起動時のブートメニューでリカバリーモードを選択
③「network」とか「root」とかいろいろ選択できるダイアログになるが、迷わず「root」を選択
④rootユーザでプロンプトが操作できることを確認し、以下を実行
# mount -o remount,rw /
参考サイト曰く、/配下を「書き込み可能な状態で再マウント」とのこと。
ちなみに、上記をやらないといくら編集しても上書きできません。ファイルコピーすらできません。15分ぐらいハマりました。
⑤sudoersを編集
# nano /etc/sudoers
私はvi派ですが、viがデフォルトで何故か無かったので、nanoを使います。
ズラズラとエラーが出ましたが、気にせずEnterキーを押すことでnanoが起動します。
⑥誤っている記述を修正
⑦Ctrl+oで上書き、Ctrl+xでnanoを終了
⑧サーバ再起動
以上です。これでsudoが無事使えるようになりました。
【LIVA】【Ubuntu server14.04】赤外線学習リモコンを使う
家電を音声を操る、という目標に向けて着々と準備しています。
赤外線学習リモコンが必要になるわけですが、iRemoconは高いため、別の手段を取ります。
で、買ったのが、
■大宮技研社のirMagician(http://www.omiya-giken.com/?page_id=837)
■ビット・トレード・ワン社のUSB接続 赤外線リモコンKIT(http://bit-trade-one.co.jp/BTOpicture/Products/005-RS/)
1.irMagicianを試す
本機は日経Linux2014年12月号でも紹介されていますが、LinuxにUSB接続すれば簡単に認識され、赤外線の学習と送出は記事の著者がインターネットで提供しているpythonプログラムで簡単に実現できます。
https://github.com/netbuffalo/irmcli
以下、python実行環境とプログラムの取得
$sudo apt-get install python-pip
$sudo pip install pyserial
$sudo apt-get install git-core
$git clone https://github.com/netbuffalo/irmcli.git
※2018/12/3追記
ラズパイ3で手順通りにやった結果。
$ sudo pip install pyserial
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: pyserial in /usr/local/lib/python3.5/dist-packages (3.4)
pipでインストールできているようだけど、python3に紐付いているようなので、実際に動かしてみるとエラーが発生します。
$ sudo python irmcli.py -h
Traceback (most recent call last):
File "irmcli.py", line 4, in <module>
import serial
ImportError: No module named serial
python2への紐付けがよくわからないので、以下のコマンドでインストールすることでとりあえずは動きます。
$ sudo apt install python-serial
※なお、python3-serialとすることでpython3向けにインストールできる
※追記終わり
実行してみます。
$ cd irmcli/
$ sudo python irmcli.py -h
usage: irmcli.py [-h] [-c] [-p] [-s] [-f FILE]irMagician CLI utility.
optional arguments:
-h, --help show this help message and exit
-c, --capture capture IR data
-p, --play play IR data
-s, --save save IR data
-f FILE, --file FILE IR data file (json)
$ sudo python irmcli.py -c
Capturing IR...
... 192
照明リモコンの赤外線(照明オン)を取得してみました。
以下のコマンドで実行可能です。
$ sudo python irmcli.py -p
Playing IR...
... Done !
取得した情報をファイルに保存するには以下のようにします。
$ sudo python irmcli.py -s -f right_light_start.json
Saving IR data to right_light_start.json ...
Done !
我が家は約10畳の縦長の部屋内に2つ照明がぶら下がっているため(真ん中に配線してくれよと思ったことは幾度となくあったが)、ファイル名も右を意味するrightとlightをかけてみた(かつ韻も踏んでみた)次第。
まぁ、そんなことはどうでもよく、以下のようにすればファイル指定で実行可能です。
$ sudo python irmcli.py -p -f right_light_start.json
Playing IR...
... Done !
2.赤外線リモコンKITで実行
実はLinuxでまだ実現できていません。
ツールとしては、こちら(http://a-desk.jp/modules/forum_hobby/index.php?topic_id=44、githubはこちらGitHub - kjmkznr/bto_ir_cmd: Bit Trade One IR Remocon tool for Linux)で展開されているlibusbを使ったツールか、こちら(http://a-desk.jp/modules/forum_hobby/index.php?post_id=382)で展開されているツールが使えるっぽいです。
Windowsように展開されているツールで試して見ると、物によって認識されたりされなかったりするようです。
【2016/1/30追記】
bto_ir_cmdで動くことは確認しています。ただし、makeした時にコンパイルエラーにあるので、以下のコマンドでlibusbを事前にインストールしましょう。
sudo apt-get install libusb-1.0-0 libusb-1.0-0-dev libusb-dev
あとは、githubに書かれているにコマンドを実行すればOK
3.双方の比較(というわけでもないけど)
赤外線リモコンKITでは、我が家では照明はダメでしたが、エアコンはうまく動作しそうです。irMagicianでは照明はOKでしたが、エアコンがダメそう。なので、一長一短といった感じ。(たぶんエアコンは送り出す信号が長いので、irMagicianでは全データを送りきれないって感じなんじゃないかと推測)
両方使っていくのもありかな、というのが現状の考えている作戦です。
【Raspberry Pi】自動実行の登録方法
Raspberry Pi(というか、raspbian-OS)で自動実行はchkconfigで実施可能です。
デフォルトで入ってた気もするけど、入ってなければ入れます。
$sudo apt-get update
$sudo apt-get install chkconfig
chkconfigを実行。事前に/etc/init.dに作ったシェルなりを入れておきます。無論、権限は変更しておきます。
$sudo chmod 755 xxx.sh
$sudo chown root xxx.sh
$sudo chgrp root xxx.sh
$sudo mv xxx.sh /etc/init.d
$cd /etc/init.d/ ←移動する必要ないかも
$sudo chkconfig xxx.sh on
登録されているかは、以下のコマンドで確認可能。
$sudo chkconfig xxx.sh --list
xxx.sh 0:off 1:off 2:on 3:on 4:on 5:on 6:off
すべて表示するなら、
$sudo chkconfig --list
を実施。