RemminaとAvahi

Linuxでリモート接続で書いたように、以前はWindowsからRaspberry Piにリモート接続して使ってたのを、今はWinodws上の仮想PCでLinuxを動かして、そこからリモート接続するようにしている。

Windowsの時はputtyやWinSCPを使用していて、Linuxではデフォルトのターミナルエミュレータやファイルマネージャがそれと同じように使えるのだが、WindowsではリモートデスクトップにRDPを使っていたので、Linuxでも同じプロトコルを使おうと思うと標準のツールでは対応できない。

UbuntuソフトウェアセンターでRDPを検索すると、Linux用のRDPクライアントが何種類か出てくる。とりあえずその中で最も評価数の多かった「Remmina」を試してみる事にした。インストールはUbuntuソフトウェアセンターから一発で行える。

実際使ってみるとリモートデスクトップ以外にもSSHシェルやSFTPによるファイル転送の機能もあり、思ったよりもかなり便利だった。Raspberry Piをリモートで使う場合はこれだけでほとんど間に合ってしまう。もっと早く使ってみれば良かった。

Remminaを起動すると以下のようなウィンドウが表示されるので、最初にツールバーの左から二番目にある「新規リモートデスクトップの作成」をクリックしてRaspberry Piを登録する。

Remmina リモートデスクトップクライアント_032

リモートデスクトップの設定_033

サーバーに接続先PCのIPアドレスを入力するのだが、Raspberry Piに「Avahi」をインストールしてあるので、IPアドレスではなく「ホスト名.local」を設定している。Avahiは一種のサーバアプリで、IPアドレスの分からないPCを即座に探し出せるようにするためのものだ。元々はZeroconfというプロトコルで、それをフリー実装したのがAvahi。

以前にRaspberry Piが固定IP設定では無く、DHCPからアドレスを割り当てられる環境の時にIPアドレスをメールで通知する方法(IPアドレスの通知)を書いたが、これはRaspberry Piからメールを送信する実験という意味もあったので、IPアドレスを知りたいだけならAvahiをインストールしておくほうが簡単。

インストールはRaspberry Piのコンソール(ターミナル)から

$ sudo apt-get update
$ sudo apt-get install avahi-daemon

で行う。
Avahiをインストールすると、その後は同じネットワーク内でZeroconfに対応したPCからは「ホスト名.local」でアクセスする事ができる。Raspberry Piのホスト名をデフォルトから変更していなければ「raspberrypi.local」になる。

$ ping raspberrypi.local
PING raspberrypi.local (192.168.1.3) 56(84) bytes of data.
64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=3.11 ms
64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=1.88 ms

LinuxとMacはZeroconfの機能が組み込まれているので、何もしなくてもAvahiをインストールしたRaspberry Piを検出できるはずだが、Windowsにはその機能がない。appleのiTunesをインストールすると、Zeroconfの元になったBonjourが組み込まれて使用可能になるようだ。

話をRemminaに戻す。
RemminaにはRDP以外にもSSHやSFTPで接続する機能があるので、それも一緒に登録しておくと便利。

リモートデスクトップの設定_034

リモートデスクトップの設定_035

すべて登録すると以下のように三種類の接続先が表示される。

Remmina リモートデスクトップクライアント_036

あとは必要とする接続先をダブルクリックするだけなのだが、リモートデスクトップの接続時はウィンドウサイズが正しく認識されない場合があった。いちど全画面にしてから「ウィンドウサイズをリモートの解像度に合わせる」を選択すれば正しく合う場合もあったが、どんどんずれて行く事もあって原因は良くわからない。その場合はマニュアルでサイズを調整する必要がある。
ホストがVirtualBoxによる仮想PCである事に関係しているのかも知れない。

1_024

それ以外は今のところ問題なく使用できている。WindowsのRDPクライアントを使った時と同じくMinecraft Piは動作しないが、これはビデオアクセラレータの機能を使用しているのでしかたがないだろう。

広告

Linuxでリモート接続

普段仕事で使用しているのがWindows PCなので、Raspberry Piへリモート接続する場合はWinSCPやputtyといったWindows用のツールを使用して行っているのだが、Raspberry PiはLinuxベースなのでリモート接続もLinuxからのほうが簡単に行える。

Windows上に仮想PCツールVirtualBoxでLinux(Xubuntu)環境を構築したので、そこからRaspberry Piにリモートアクセスを行ってみた。まずはコンソール(ターミナルエミュレータ)からの接続で、これはSSHコマンドで簡単に行える。クライアントとなるLinux側から、以下のようにSSHコマンドを実行すれば良い。もちろんIPは接続するRaspberry Piのアドレスを指定する。

$ ssh -l pi 192.168.1.2

パスワードを入力すれば接続完了。あとは普通に使うことができる。

ファイルマネージャからRaspberry Piのファイルにアクセスする場合は、ファイルマネージャの機能を使う方法と、マウントして行う方法の二通りがある。Xubuntuは標準では「Thuna」というファイルマネージャが使われているので、まずはそれで接続する方法。異なるファイルマネージャが採用されているLinuxディストリビューションでは、当然ながら同じようには設定できないが、同等の機能は何かしらあるはずだ。

ファイルマネージャのメニューで「移動→指定場所を開く」を選択、または「Ctrl+L」を入力。
Xubuntu_Develop

上部の入力窓に

sftp://192.168.1.2/home/pi/

のように接続するRaspberry Piのアドレスとフォルダを入力
Xubuntu_Develop2

IDとパスワードを入力して接続完了。
Xubuntu_Develop3

最後にRaspberry Piのフォルダをマウントして使う方法。これはsshfsを使うので、以下のようにインストール

$ sudo apt-get install sshfs

使用するユーザをfuseグループに所属させてから、再起動

$ sudo adduser $USER fuse

マウントするフォルダを作成して、sshfsコマンドでマウント

$ mkdir mnt
$ sshfs pi@192.168.1.2:/home/pi/ mnt

この場合はRaspberry Piのpiユーザ権限でmntフォルダに/home/pi/フォルダをマウントする。実行するとパスワードを聞かれるので、指定したユーザのパスワードを入力して完了。アンマウントする時は以下のようにfusermountコマンドを使用する

$ fusermount -u mnt

実際に色々と試してみた感じではWindowsからリモートアクセスするよりも、やはり同じLinuxからアクセスしたほうがやりやすい。仮想PCツールでWindows上にも手軽にLinux環境は構築できるので、Raspberry Piにモニタやキーボードを繋がずに使いたい場合にはそれも一つの手だろうと思う。

XRDP(3)

Raspberry PiにXRDPサーバをインストールすると、Windowsのリモートデスクトップ接続をクライアントとしてリモートで使う事ができるのだが、そのままだとキーボードが英語キーボードとして認識されてしまうため、日本語キーボードを使用している場合は記号等がキートップとは違う配置になって非常に使いにくい。

ネットで解決策を探すと、この場合は /etc/xrdp フォルダに以下のファイルを作成すれば、日本語キーボードが認識されるようだ。

  • km-0411.ini
  • km-e0010411.ini
  • km-e0200411.ini
  • km-e0210411.ini

内容的には全て同一のファイルなので、以下の手順でネットから km-e0010411.ini ファイルをダウンロードして、パーミッションを変えてからコピーすれば良い。

$ cd /etc/xrdp
$ sudo wget
http://www.mail-archive.com/xrdp-devel@lists.sourceforge.net/msg00263/km-e0010411.ini
$ sudo mv km-e0010411.ini km-0411.ini
$ sudo chmod 644 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

終わったらXRDPサーバを再起動する。

$ sudo service xrdp restart

これで以降のリモート接続からは、キートップ通りの入力が行えるようになるはず。

MATE

Raspberry Pi(Raspbian)は処理能力の低いPCでも軽快に動作するように設計されたデスクトップ環境LXDEが標準で採用されていて、確かに動作は軽いのだがその分かなり切り詰められた感じがあって、慣れないとちょっと使い辛く感じる事もある。

LinuxはOSそのものとデスクトップ環境は分離しているので、もっとリッチなデスクトップに切り替える事も可能なのだが、Raspberry Piの処理能力はPCとして見れば二昔前程度のパフォーマンスしか無いため実用性に欠けてしまう。

Linux Mintディストリビューションの標準デスクトップ環境の一つとして採用されているMATE(マテ)はWindowsライクな外観と数多くのツールを持ち、比較的軽量らしいのでRaspberry Piで試してみる事にした。

RaspbianにMATEをインストールする為には、最初にパッケージ情報ファイル”/etc/apt/sources.list”にリポジトリ行を追加する必要がある。sources.listはroot権限でしか編集できないので、sudoを付けてテキストエディタを起動する。

nanoを使って編集する場合は

$ sudo nano /etc/apt/sources.list

と入力してファイルを開き

deb http://archive.raspbian.org/mate wheezy main

の行を追加して保存したら

$ sudo apt-get update
$ sudo apt-get install mate-core mate-desktop-environment

を実行すれば良い。
インストールにはかなり時間がかかるので、余裕を見て行った方が良いだろう。

インストールが完了したら

$ sudo update-alternatives --config x-session-manager

を実行してデフォルトのウィンドウマネージャをMATEに切り替える。
恐らく最初は

There are 4 choices for the alternative x-session-manager (providing /usr/bin/x-session-manager).

  Selection    Path                      Priority   Status
————————————————————
* 0            /usr/bin/startlxde         50        auto mode
1            /usr/bin/lxsession         49        manual mode
2            /usr/bin/mate-session      30        manual mode
3            /usr/bin/openbox-session   40        manual mode
4            /usr/bin/startlxde         50        manual mode

Press enter to keep the current choice[*], or type selection number:

のように表示されるはずなので、mate-sessionの番号を入力して切り替えておく。
あとはstartxで起動するか、リモートデスクトップでログインすればMATEデスクトップ環境が表示されるはずだ。

デスクトップテーマを変更して、パネルの位置も調整してなるべくWindowsライクにするとこんな感じになる。LXDEよりはやや動作が重く感じるが、このデザインならLinuxに慣れていない人でも、多少は使いやすく感じるのでは無いだろうか?

Mate

XRDP(2)

Windows8.1のリリースと同時に、マイクロソフトからiOSとAndroid対応のリモートデスクトップクライアントツールがリリースされた。

RDPに対応したリモートデスクトップクライアントなので、Raspberry PiにインストールしたXRDPサーバとも通信が可能なはず。と思い試してみた。iOS用はここ、Android用はここからダウンロードできる。

Android用はバージョン2.2以降とかなり古いバージョンから対応しているが、iOS用はバージョン6.0以降でないとダメなようだ。iOSデバイスは所持していないので、Androidスマートフォンへインストールを行って試してみた。

起動すると接続先一覧の画面になるので「+」のアイコンをタップしてRaspberry PiのIPアドレスとユーザ名、パスワードを入力。
20131021-200654

接続先がリストに登録されるので、それをタップ

20131021-200730

信頼されていない接続、という警告が出る(どの環境でも出るのかは不明)ので、Connect AlwaysかConnect Onceをタップ。
20131021-200815

間違いが無ければこれでXRDPサーバが稼動しているRaspberry Piのデスクトップに接続できるはずだが、Windows版のクライアントのように画面解像度を指定しての接続はできないらしく、常に端末側の解像度と一致した画面になってしまう。

20131021-200831

このため、4インチ程度のスマートフォンで接続すると異様に細かくなってしまい、文字がほとんど読めない。7インチや10インチであまり解像度の高くないタブレット端末のほうがこの用途には向いていると思う。
ピンチして画面の部分拡大もできないが、画面上部の移動アイコンをタップすると画面が拡大されて、スクロールして見ることができる。

20131021-201141

この時の操作方法がちょっと独特で、最初に中央の移動アイコンをタップしてから、指を離さずにスライドさせる事で画面がスクロールする。画面の一部を拡大表示している窓を、指で滑らせて移動するイメージ。
スマートフォン本体のメニューボタンで表示されるメニューバーで、特殊キーの入力も可能になる。右から2番目のアイコンでタッチパネルとマウスポインタが同期するようになるので、アイコンのダブルクリック等はそれで行える。

スマートフォンでの実用性はほぼ無いに等しいが、画面の大きいタブレット端末ならBluetoothキーボード等と組み合わせて開発に使えるかも知れない。Windowsへのリモート接続を行う場合もあるなら、一本のアプリで済んでしまうので選択肢として覚えておいても良いだろう。

XRDP

Raspberry PiのデスクトップをWindowsでリモート表示させたい時、VNCを使用する方法を以前に書いたが、この場合PC側にクライアントソフトを用意する必要がある。

Windowsにはもともとマイクロソフト独自のリモートデスクトッププロトコルが(RDP)が用意されているので、Raspberry PiでRDPサーバを動かせばクライアントソフトは標準のものがそのまま使える。

Linux用のRDPサーバXRDPをRaspberry Piで動かすのは簡単で、コマンドラインで以下のようにapt-getを使ってインストールすれば良い。

$ sudo apt-get install xrdp

インストールが完了したら、次にxrdpを使用するユーザを設定する必要がある。
/etc/groupをエディタで開くと最後にxrdpグループが追加されているはずなので、Raspberry Piのデフォルトユーザを追加するなら、xrdpのグループ行に以下のように書いて保存する(グループIDは異なる可能性がある)。ユーザが複数存在する場合は、カンマで区切って並べる。

xrdp:x:116:pi

groupファイルを編集する時は、sudoを付けてエディタを起動するか、vigrpコマンドを使う。vigrpはファイルをロックしてからviを起動するため、viに慣れていない人は

$ sudo nano /etc/group

で編集する。エディタでgroupファイルを直接編集するのはあまり推奨されないのだが、ユーザが自分しかいないRaspberry Piなら問題は無い。

XRDPサービスは既に起動されているはずだが、念のため以下のコマンドで起動しておく。

$ sudo /etc/init.d/xrdp start

これで準備は整ったので、Windowsのスタートメニュー > プログラム > アクセサリ > リモートデスクトップを起動してRaspberry PiのIPアドレスを設定。画面の解像度と色は任意の設定で大丈夫だったが、転送データが大きくなるので必要が無ければ色は16ビットにしておいたほうが良い。

スクリーンショット 2013-10-12 08.57.07 スクリーンショット 2013-10-12 08.57.33
接続が確立されると以下の画面が出るので、ユーザIDとパスワードを入力。

スクリーンショット 2013-10-12 09.01.55 スクリーンショット 2013-10-12 09.02.42 スクリーンショット 2013-10-12 09.03.16
全体的にVNCよりも動作が軽い気がする。Windowsでしか使えないが、クライアントソフトを用意しなくても良いのはメリットだろう。

Virtual Network Computing

Raspberry PiにRaspbianのSDメモリを装着して、HDMIモニタを接続して起動すれば何の問題もなくデスクトップ画面が表示されるが、見た目はWindowsと同じようでも中身はだいぶ違う。
Linuxのデスクトップ(X-Window)は内部的にクライアントサーバ構成になっていて、クライアントとサーバ間はXプロトコルによって通信が行われるので、ネットワークにXプロトコルを通せばリモートデスクトップとして使用できる。

Raspberry Piのリモートデスクトップでよく使われているVNC(Virtual Network Computing)はそれとは異なる仕組みで、独自のVNCプロトコルによって通信が行われている。これは画面イメージを細分化されたピクセルデータとして送信する仕組みで、負荷が大きくなってしまうがWindowsからでも利用可能となるため、Raspberry Piではこちらの使用例が多い。

よく使用されているTightVNCは、コマンドラインで以下のようにインストールする。

$ sudo apt-get install tightvncserver

画面解像度等を変更したい場合は、起動時のオプションで指定する。初回起動時のみ接続パスワードの設定が要求される。

$ vncserver
You will require a password to access your desktops.
Password:
Verify:
Would you like to enter a view-only password (y/n)? n

New ‘X’ desktop is raspberrypi:1

Creating default startup script /home/pi/.vnc/xstartup
Starting applications specified in /home/pi/.vnc/xstartup
Log file is /home/pi/.vnc/raspberrypi:1.log

VNCで接続するためにはVNCクライアントソフトを用意する必要があるが、WebブラウザにChromeを使用しているのであれば、ChromeにVNC Viewerアプリを追加して使う事もできる。vnc1Raspberry PiのIPアドレスを入力して[Connect]をクリックすると、 暗号化されていない接続という警告が出る。
vnc2[Connect]をクリックして次へ進み、vncserver起動時に設定した接続パスワードを入力する。 vnc3正常に接続されればブラウザにRaspberry Piのデスクトップが表示されるはずだ。
vnc4

注意点がひとつ。
VNCでリモート接続している状態で、ウィンドウを表示するアプリをsudoを付けて実行すると、以下のようなエラーが出る場合がある。

Invalid MIT-MAGIC-COOKIE-1 key

Raspberry PiのGPIOをRPi.GPIOで操作する場合、RPi.GPIOは特権レベルを必要とするのでこれでは困る。Xの認証がらみでこのへんは色々とややこしく、色々と試してみた結果xhostコマンドで以下のように権限を与えてしまうのが最も簡単なようだ。

$ xhost +local:user

VNCでRaspberry Piのデスクトップに接続した時、VNCクライアントを終了させてもVNCサーバ側は終了せずに動き続けているので、再び接続すると終了時の画面が表示される。VNCサーバ側を終了する場合は、以下のように指定する。

$ vncserver -kill :1

最後の1はディスプレイ番号で、vncserverで複数のディスプレイを作成した場合は、終了させたいディスプレイ番号を入力する必要がある。

表示速度はかなり遅いが、HDMIモニタを接続しなくてもデスクトップが使用できるので、ゲームは無理でもGUIを持つアプリのデバッグ等では役に立つと思う。