【Raspberry Piセットアップ方法(旧式)】ラズパイ & Remmina on LinuxでRDP接続してリモートデスクトップさせてみる
※ 当ページには【広告/PR】を含む場合があります。
2020/03/29
2022/04/16
例えばLAN越しにRaspberryPi(以下ラズパイ)をリモートデスクトップ接続ができるだけで、開発用のPCを一台に集約し、テスト環境下に置いた複数台のラズパイを遠隔操作しながら組込み開発できるなど、いろいろなユースケースが考えられます。
今回はラズパイにリモートデスクトップを導入するまでの手順をまとめ、ラズパイでリモートデスクトップするまでの方法を解説します。
まず最初にリモートデスクトップの事前準備として、ラズパイのデスクトップの自動ログイン機能をオフにし、ユーザー・パスワードでログイン認証できるようにします。
※2021/1月現在でRaspberry Pi OS(旧Raspbain OS)でも動作確認して内容の方をアップデートしています。 なおBeta版のRaspberry Pi OS 64bitでも基本的には同じ内容が適用できるようです。
※2022/4月現在、Raspberry PIのデフォルトユーザー名
ラズパイ側での下準備
ラズパイへRDP接続する前段階として、まずはRDP接続させるクライアント設定を以降の手順でラズパイに仕込んでいきます。
ラズパイの動作環境確認
動作確認用に利用したラズパイはRaspberryPi 3B+/4です。
ラズパイにインストールしているLinuxの情報は
lsb_release -a
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
Codename: buster
ラズパイの自動ログイン機能
ラズパイに
Raspberry Pi OS
ユーザー名:
pi
パスワード:
raspberry
の値で与えられており、
root
とりあえず今回は自宅のLAN内限定でリモートデスクトップを利用しますが、基本的にリモートデスクトップを使う場合には、セキリュティ重視に運用すべきですので、本番環境ではユーザー名とパスワードをしっかり管理しなければなりません。
ユーザー名の変更のやり方は後回しにして、しばらく
pi
パスワードの変更
パスワードの変更にはシステム設定用のユーティリティツール
raspi-config
$ sudo raspi-config
以下のようにリスト項目から
1. System Options > S3. Password

すると、新しいパスワードの入力が求められ、入力したら変更完了です。 設定したパスワードは忘れないようにメモしておきます。
自動ログイン設定の解除
デフォルトでは、ユーザーは自動ログインになっているので、ユーザー名とパスワードによって手動でログインできるように設定を変更しましょう。
lightdm.conf
次に
/etc/lightdm/
lightdm.conf
$ sudo nano /etc/lightdm/lightdm.conf
...中略
#autologin-user=pi #👈 ココをコメントアウト
...
これで再起動したらログイン時にユーザー名とパスワードを逐次要求されるようになります。
autologin@.service
ついでに今はまだ変更しなくてもいいのですが、ユーザー名を変えたときに関連して、ユーザーログイン時に用いられるデーモン起動用の設定ファイルも覗いておきましょう。
/etc/systemd/system/
autologin@.service
$ cat /etc/systemd/system/autologin@.service
#...中略
[Service]
#The VT is cleared by TTYVTDisallocate
ExecStart=-/sbin/agetty --autologin pi --noclear %I $TERM
#ExecStart=-/sbin/agetty --autologin <カスタムユーザー名> --noclear %I $TERM
Type=idle
Restart=always
RestartSec=0
UtmpIdentifier=%I
TTYPath=/dev/%I
TTYReset=yes
#...以下略
現在はデフォルトユーザー名
pi
ExecStart=-/sbin/agetty --autologin pi --noclear %I $TERM
これで自動ログインがオフになったので、再起動して確認してみましょう。
xrdpをRDPクライアント(ラズパイ)にインストール
さてここから本題のリモートデスクトップの環境構築をやっていきます。
リモートデスクトップといっても、主に
+ SSH接続
+ VNC接続
+ RDP接続
のようなものがあります。 それぞれの詳細はグーグル先生にでも聞いていただくとしまして、それぞれの接続方式に長所短所があり、肝心なことはユーザーが目的に適した接続方法を選択することであります。
今回はRDP接続を使ったリモート環境からのラズパイの開発を想定しておりますので、手始めに
xrdp
といっても今日日、ラズパイへの
xrdp
$ sudo apt update && sudo apt upgrade
$ sudo apt install xrdp
インストールが問題なく完了したら以下のようにRDP接続の環境が整っているとおもいます。
$ xrdp --help
xrdp 0.9.9
A Remote Desktop Protocol Server.
Copyright (C) 2004-2018 Jay Sorg, Neutrino Labs, and all contributors.
See https://github.com/neutrinolabs/xrdp for more information.
Configure options:
--enable-ipv6
--enable-jpeg
#...中略
Compiled with OpenSSL 1.1.1d 10 Sep 2019
おまけでですが、現在のxrdpのパッケージ依存性も確認しておきます。
$ apt-cache depends xrdp
xrdp
依存: adduser
依存: lsb-base
依存: ssl-cert
依存: libc6
依存: libfuse2
依存: libjpeg62-turbo
依存: libopus0
依存: libpam0g
依存: libssl1.1
依存: libx11-6
依存: libxfixes3
依存: libxrandr2
推奨: fuse
fuse3
推奨: xorgxrdp
提案: guacamole
提案: <xrdp-pulseaudio-installer>
SSHサーバーの起動
ラズパイをCLI(コマンドライン)から操作するためにはSSHが欠かすことのできないツールになります。 RDP接続においてもSSHは必須の要素ですので、この節でSSH接続が使えるようにラズパイ側に設定を行います。
まずラズパイのターミナル上で、以下のように設定ユーティリティを起動しましょう。
$ sudo raspi-config
すると設定画面に移行しますので、
3. Interfacing Options > P2. SSH

そこでSSHを有効化するかどうか聞かれるので、
はい

念の為、有効化したあとはラズパイ再起動しましょう。
クライアント側のsshで接続
開発用のデスクトップに移り、ターミナルからssh接続させてみましょう。
$ ssh pi@192.168.0.105
pi@192.168.0.105\'s password:*********
Linux raspberrypi 4.19.102-v7+ #1295 SMP Thu Feb 6 15:43:59 GMT 2020 armv7l
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Feb 7 18:40:24 2020
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
Codename: buster
$ who
pi tty1 2020-02-07 19:07
pi pts/0 2020-02-07 19:33 (192.168.0.108)
$ exit
ログアウト
Connection to 192.168.0.105 closed.
となり、SSH接続できました。
ちなみに
who
192.168.0.105
たとえばここでは、
tty1
pts/0
192.168.0.108
SCPコマンドでssh接続間のファイルのやり取り
個人的に良く忘れやすいのでscpコマンドについて利用方法をまとめておきます。
scp
$ scp [オプション] [送り元のファイルかフォルダ] [送り先のパス]
利用例として以下にいくつか挙げます。 ローカルにあってSSHでコンソールから接続する側がクライアント、リモートにあって接続される個体がサーバーとしますと、
##👇クライアント > サーバー(IP:192.168.0.105の時)
#① クライアントの1つのファイル(~/Desktop/hoge.dat)をサーバー(のHomenのred-tacoフォルダ)に送る
$ scp ~/Desktop/hoge.dat pi@192.168.0.105:~/red-taco/
#② フォルダの中身を全て送りたい場合は-rオプションを使う
$ scp -r ~/Desktop/red-taco pi@192.168.0.105:~/red-taco/
#③ SSH開放ポートが22以外なら-Pオプションを使う
$ scp -P 55555 -r ~/Desktop/red-taco pi@192.168.0.105:~/red-taco/
##👇サーバー(IP:192.168.0.105の時) > クライアント
#① サーバーの1つのファイル(~/red-taco/hoge.dat)をクライアント(のHomenのDesktopフォルダ)に送る
scp pi@192.168.0.105:~/red-taco/hoge.dat ~/Desktop/
#② フォルダの中身を全て送りたい場合は-rオプションを使う
$ scp -r pi@192.168.0.105:~/red-taco ~/Desktop/
#③ SSH開放ポートが22以外なら-Pオプションを使う
$ scp -P 55555 -r pi@192.168.0.105:~/red-taco/ ~/Desktop/
pi(デフォルトユーザー名)の変更
ラズパイへのssh接続ができたので、次はデフォルトユーザー名の
pi
一時的な作業用ユーザーの作成
下記のコマンドでtempユーザを作成した後、sudo権限に追加します。
$ sudo useradd temp
$ sudo gpasswd -a temp sudo
ユーザ temp をグループ sudo に追加
$ sudo passwd temp
新しいパスワード:*******
新しいパスワードを再入力してください:*******
passwd: パスワードは正しく更新されました
作成したパスワードは控えておきましょう。
(余談)rootでログイン
通常ではラズパイに
root
$ cat /etc/ssh/sshd_config
#...中略
#Authentication:
#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#...以下略
とrootでのログインは許可されていないようです。
今回は作業用のユーザーで新規ユーザーを作成する方法を利用しましたが、どうしてもrootに入って(自己責任で)操作したい場合には、
$ sudo nano /etc/ssh/sshd_config
#...中略
#Authentication:
PermitRootLogin yes
としてsshを再起動すると、ログインできるそうです。
tempユーザーでログイン
まだユーザーはpiのままですので、tempに切り替えてログインします。
まずは
pi
$ sudo nano /etc/systemd/system/autologin@.service
#...中略
[Service]
#the VT is cleared by TTYVTDisallocate
#ExecStart=-/sbin/agetty --autologin pi --noclear %I $TERM
またお手元のラズパイによっては、
/etc/systemd/system/getty@tty1.service.d/autologin.conf
$ sudo nano /etc/systemd/system/getty@tty1.service.d/autologin.conf
[Service]
#ExecStart=-/sbin/agetty --autologin pi --noclear %I $TERM
個人的はオートログイン機能を使う予定はないのですが、もしオートログイン機能を復活させて使う際にはここらへんの設定を戻してあげると良いでしょう。 設定ファイルを書き換えたら、再起動します。
$ sudo reboot
Connection to 192.168.0.103 closed by remote host.
Connection to 192.168.0.103 closed.
再起動後に、ここからは先程作業用に作ったユーザー・
temp
pi
$ usermod -l hogehoge pi
usermod: user pi is currently used by process 1234
ということで、tempユーザーに切り替える前に、
raspi-config
$ sudo raspi-config
#👇選択肢から
#1. System Option >
#S5. Boot / Auto Login >
#B1. Console
#の順で変更
これで再起動し終わったら、
$ ssh temp@192.168.0.105
temp@192.168.0.105\'s password:******
Linux raspberrypi 4.19.102-v7+ #1295 SMP Thu Feb 6 15:43:59 GMT 2020 armv7l
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Could not chdir to home directory /home/temp: No such file or directory
temp@raspberrypi:/$ who
temp pts/0 2020-02-07 21:14 (192.168.0.108)
ということで無事
temp
temp
piからユーザー名を変更する
では本題の
usermod
pi
red-taco
$ sudo usermod -l red-taco pi #ユーザー名変更
$ sudo usermod -d /home/red-taco -m red-taco #ホームディレクトリの名前修正
$ sudo groupmod -n red-taco pi #権限グループの変更
終わったら再起動します。
では
red-taco
pi
$ ssh red-taco@192.168.0.105
red-taco@192.168.0.105\'s password:*******
Linux raspberrypi 4.19.102-v7+ #1295 SMP Thu Feb 6 15:43:59 GMT 2020 armv7l
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Feb 7 21:04:59 2020
red-taco@raspberrypi:~ $ who
red-taco pts/0 2020-02-07 21:25 (192.168.0.108)
ちゃんと新しいユーザーとして認識されました。
後片付け
作業用に利用した
temp
$ sudo userdel -r temp
あなたはシステム管理者から通常の講習を受けたはずです。
これは通常、以下の3点に要約されます:
#1) 他人のプライバシーを尊重すること。
#2) タイプする前に考えること。
#3) 大いなる力には大いなる責任が伴うこと。
[sudo] red-taco のパスワード:*********
userdel: temp のメールスプール (/var/mail/temp) がありません
なにかしら警告がでますが無視してもよさそうです。
ここまでの内容で参考にさせて頂いたサイト
SSHのポート番号の変更
前節までで、ssh接続によるユーザー名の変更を解説しました。
この時点で本題のRDP接続も十分可能なのですが、前回の内容でssh接続のポート番号がデフォルトの
22
まずはsshのポート番号の変更を先にやりましょう。 sshのポート番号を変更しますが、若い番号だとみっちりと役割予約されている場合がおおいようですので、
ここでは好みの問題で例えばポート番号を
55555
なおsshでリモート接続しながら、sshのポート番号を変更できませんので、ラズパイ実機で直接作業します。 ラズパイのコンソールで設定ファイルの中のポート番号を記述している箇所を変更・保存しましょう。
$ sudo nano /etc/ssh/sshd_config
#...中略
#Port 22
Port 55555
#...以下略
その後sshを再起動します。
$ sudo /etc/init.d/ssh restart
[ ok ] Restarting ssh (via systemctl): ssh.service.
それではリモートのsshクライアント機から接続してみます。
$ ssh red-taco@192.168.0.105 -p 55555
red-taco@192.168.0.105\'s password:*********
Linux raspberrypi 4.19.102-v7+ #1295 SMP Thu Feb 6 15:43:59 GMT 2020 armv7l
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Feb 8 02:10:11 2020 from 192.168.0.108
red-taco@raspberrypi:~ $
これで、sshのポート番号を無事変更することができました。
IPアドレスの固定
毎回DHCPで動的に割り振られたIPアドレスでリモートデスクトップを利用するのは大変ですので、ラズパイ子機のIPアドレス固定方法をここで試してみます。
ここでは無線LANでのWi-Fi接続前提で、IPアドレスの固定方法を行います(有線LANでの場合は取り上げませんが
Wi-Fiの初期設定
だいたいラズパイを購入された方は、手始めにWi-Fi接続をさせてみる方が多いと思いますので、既に接続されている方はこの項目をスキップしてください。
以下は、ラズパイのWi-Fi設定ウィザードを利用せずに、Wi-Fiの設定ファイルに直接書き込む方法です。
$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP
network={
ssid="********" # Wi-Fiのssid名
psk="********" # Wi-Fiのパスフレーズ
key_mgmt=WPA-PSK
}
これでネットワークに接続できるか確認ください。
IPアドレス値の固定
では、ネットワークの設定ファイルを編集し、IPアドレス値を固定します。 今回は試しに
192.168.0.250
サブネットマスクはだいたいご家庭用の無線Wi-Fiルーターなら
/24
デフォルトゲートウェイ値は、お手元の無線ルーターでメーカーごとに仕様が異なります。 例えば著者が利用中の無線Wi-FiのルータはTP-Linkの無線ルーターですので、デフォルトゲートウェイは
192.168.0.1
$ sudo nano /etc/dhcpcd.conf
#...中略
#以下をファイル内に追記
interface wlan0
static ip_address=192.168.0.250/24 # 固定したいIP+サブネットマスク
static routers=192.168.0.1 # デフォルトゲートウェイ
static domain_name_servers=192.168.0.1 # デフォルトゲートウェイ
再起動して早速IPを確認します。
$ ifconfig
#...中略
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.250 netmask 255.255.255.0 broadcast 192.168.0.255
#...
となり、確かに
192.168.0.250
おまけ:IPの確認コマンドの色々
本筋の内容と関係ないですが、
ifconfig
networkctl
ネットワークの稼働状態を教えてくれるコマンドです。 その際にIPアドレスも表示されています。
$ networkctl status
WARNING: systemd-networkd is not running, output will be incomplete.
● State: n/a
Address: 192.168.0.250 on wlan0
fe80::a3d5:12:4be7:6270 on wlan0
Gateway: 192.168.0.1 on wlan0
hostname
IPアドレスだけを引っこ抜きたいときの最もシンプルなコマンドです。
$ hostname -I
192.168.0.250
ip
IP周りの詳細なプロフィール情報を表示させます。 サブネットマスク表示など、現在のネットワークを詳しく知りたいときのコマンドです。
$ ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.0.250/24 brd 192.168.0.255 scope global noprefixroute wlan0
valid_lft forever preferred_lft forever
補足編 〜 Dockerとdocker-composeを使えるようにしておく
個人にラズパイをdockerと組み合わせて何らかのサーバーとして常時起動させておくような使い方が多いので、docker回りのインストール手順にも触れておきます。
ラズパイへのdockerの導入方法は、リソースビルドするしか無かった時代と比べると、かなり楽になっています。 以下のようにインストールスクリプトが用意されているので、このスクリプトを走らせるだけで簡単にdockerを導入することができます。
$ curl -sSL https://get.docker.com | sh
さらにpip3で簡単にdocker-composeもインストールできますので、これも導入しておきます。
$ sudo pip3 install docker-compose
ちなみに直近のRaspberry Pi OSはデフォルトでpython3がインストールされていると思いますが、
$ sudo apt install python3-pip
もしdocker-composeのインストール中に、pip3から
No package 'libffi' found
libffi
$ sudo apt update
$ sudo apt install libffi-dev
とするとdocker-composeも簡単に使えるようになると思います。
ちなみに
sudo
$ docker ...
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/create?fromImage=alpine&tag=edge: dial unix /var/run/docker.sock: connect: permission denied
これは現在のユーザーにdockerコマンドを直接実行する権限がないと言われているために起こるものです。 毎回
sudo
$ whoami
red-taco
#👇権限を与えたいユーザーに"red-taco"の箇所を置換える
$ sudo usermod -g docker red-taco
$ sudo systemctl restart docker.service
$ id red-taco
#👇ユーザーにdockerの実行権限が付与されている
uid=1000(red-taco) gid=995(docker) groups=995(docker),...
設定を有効にするためには、一度ログアウトしてログインし直すか、再起動するとdockerコマンドの実行にログイン中のユーザーにルート権限を持たせるためには以下のコマンドを叩くと次回からは
sudo
ラズパイへRDP接続する
前節までで
ラズパイのIP固定方法
SSHのポート番号変更
上記したようにWi-FiのIPアドレス値を固定する手順を説明していましたが、そこで固定したIPアドレス値を使って、
Remmina
Linuxデスクトップの動作環境
現在、この内容執筆時の
Remmina
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 10 (buster)
Release: 10
Codename: buster
$ cat /etc/debian_version
10.3
Remminaは対応できるLinuxOSの種類が多いので、
以降はDebian10でのインストールを確認した際の手順で説明していきます。 他のLinuxディストリビューションでも、おおまかな手順は同じですので、多少の手順の違いは御了承ください。
LinuxにRemminaのインストール
メニューからパッケージマネージャを開きます。

パッケージイントーラを立ち上げ、
Remmina

インストールが終わると、アプリケーションメニューに
Remmina

Remminaを使ったRDP接続
さて、前回までで散々設定を施してきたラズパイへ、いよいよRemminaからRDP接続する作業です。
まずRemminaを立ち上げます。

左上の
新規プロファイル作成

今回は基本設定以外の設定はいじりません。 設定項目は以下の通りです。
名前:
お好きなプロファイル名
#例)red-taco@rasppi
プロトコル:
RDP
サーバー:
ホスト機(ラズパイ)のIP
#例)192.168.0.250
ユーザー名:
ホスト機(ラズパイ)へログインするユーザー名
#例)red-taco
ユーザーパスワード:
ログインするユーザーのパスワード
解像度:
1024x768(カスタム)
#お使いのディスプレイに合わせて設定
色数:
GFX RFX(32bpp)
#画面転送量に関連
IPなどの設定項目は、ご自分の環境で設定した値を入力してください。
ちなみにラズパイ4では画面解像度が
1152x864
RemoteFX(32bpp)
適切に設定が反映された後に接続させてみると、

無事RemminaでRDP接続できました。
thinclient_driversの処理
気にならなければ、そのままRDP接続を利用できるのですが、そのままではデスクトップ上に
thinclient_drivers
ではラズパイ上で、設定ファイル
/etc/xrdp/sesman.ini
FuseMountName=.thinclient_drives
$ sudo nano /etc/xrdp/sesman.ini
#....中略
[Chansrv]
; drive redirection, defaults to xrdp_client if not set
; FuseMountName=thinclient_drives ; 👈コメントアウト
FuseMountName=.thinclient_drives
[SessionVariables]
PULSE_SCRIPT=/etc/xrdp/pulse/default.pa
編集し終わったら、元あった
thinclient_drives
xrdp
$ ls ~
thinclient_drives
$ rm -rf thinclient_drives
$ sudo systemctl restart xrdp
再度RemminaでRDP接続をすると、デスクトップからアイコンが消えて、隠しファイル化しております。

まとめ
長くなりましたが、RemminaによるRDP接続を行う手順を説明してまいりましたが、いかがでしたでしょうか。
RDP接続を使えば、ラズパイにSSH接続するときには手の届かなかったグラフィカルな操作が可能になりますので、カメラや音声を取り込むような自作のアプリケーションを動作確認するようなユースケースに捗りそうです。
今後なにか面白い応用が思いつけばブログで取り上げるかもしれませんので、またその時はタコキンのブログをチェックいただけたら幸いです。