257.ラズパイ無双[5_リモート(RDP)]
初回:2022/5/18
修正:2022/5/21
Raspberry Pi (ラズベリーパイ、通称"ラズパイ")で何か作ってみようという新シリーズです。今回はWindowsのリモートデスクトップでラズパイに接続する環境を設定したいと思います。
P子「Windowsからアクセスできれば楽よね」※1
ラズパイ無双の[1.インストール]編で、#4.VNC の設定 を行いましたが、Windows側に、VNC クライアントをインストールする必要がありますが、リモートデスクトップなら、Windwos側の標準ソフトで接続できます。さらにうれしい事に、ファイル転送を、Ctrl-CとCtrl-Vで行うことができるので、非常に便利です。
≪参考資料≫
https://scratchpad.jp/raspberry-pi-3-model-b-plus-4/
Raspberry Piにリモートデスクトップで接続する
1.xrdpのインストール
$ sudo apt install -y xrdp
2.crontab で、OS起動時に実行する
前回の『256.ラズパイ無双[4.SDカード延命]』で、/var/log を、RAMディスクに移しているため、xrdp をサービス化できません。そこで、crontab で、@reboot 機能で起動します。
①scripts フォルダを作成
各種設定ファイルをそこに置いておく事にします。
今後は、Windwos上で作成しておき、VNCやRDPでファイル転送するのが楽です。
$ cd
$ mkdir scripts
②xrdpStart.sh を作成する
$ cd scripts
$ nano xrdpStart.sh
#!/bin/sh
touch /var/log/xrdp.log
chown xrdp:adm /var/log/xrdp.log
chmod 640 /var/log/xrdp.log
systemctl start xrdp
systemctl status xrdp
③/etc/xrdp/ に コピー します。
実行権限も付けておきます。
$ sudo cp /home/xxx/scripts/xrdpStart.sh /etc/xrdp/
$ sudo chmod +x /etc/xrdp/xrdpStart.sh
④crontab にxrdpStart.shを追加
$ sudo crontab -e
@reboot /etc/xrdp/xrdpStart.sh
⑤サービスの停止と無効化
$ sudo /etc/init.d/xrdp stop
$ sudo systemctl stop xrdp
$ sudo systemctl disable xrdp
⑥リブートします
$ sudo reboot
3.Windowsから接続してみる
Windowsのスタートメニューから「Windows アクセサリ」→「リモートデスクトップ接続」を立ち上げます。私はよく使うのでショートカットを作成しています。リモートデスクトップの使い方は、探せば色々と出てきますので、ここでは割愛したいと思います。
4.スクリーンキーボードの設定
リモートデスクトップ接続とはあまり関係ありませんが、ラズパイ側にスクリーンキーボードを入れておくと、後々便利です。
仮想キーボードには色々なプログラムがありますが、私は「onboard」を入れました。
①インストール
$ sudo apt install -y onboard
ラズパイから、[メニュー]→[ユニバーサルアクセス]に移動すると、オンボードキーボードが表示されます。
デスクトップにアイコンを置きたい場合は、上記のメニュー上で、右クリックすると、Add to desktop が出るので、クリックします。
キーボードの右下のアンテナを横にしたようなマークから、設定画面に入るアイコンが見えます。テーマを変更したり好みにカスタマイズしてください。
アンダーバーとバックスラッシュの出し方がどうしてもわからなかったので、スニペットに登録してしまいました。先ほどのアンテナを横にしたようなマークから追加できます。変更時は、設定画面から行います。
私は、アンダーバーなど、下記の5項目を登録しておきました。
アンダーバー
バックスラッシュ
sudo apt update && sudo apt -y upgrade
sudo reboot
sudo poweroff
5.RDPに関係するエラー
①xrdpユーザをssl-certに追加する
$ sudo gpasswd -a xrdp ssl-cert
Bullseye でPi カメラを接続するために、/boot/config.txtファイルの 末尾(これ重要!) にdtoverlay=ov5647 を追記したところ、xrdp がエラーになりました。
②Gtk-WARNING **: cannot open display: :10.0
GUIを使用する場合、Xサーバーに接続する必要がありますが、「ディスプレイ番号.スクリーン番号」に接続できないケースがあります。
通常なら、DISPLAY設定を指定すれば、接続できます。
$ export DISPLAY=:0.0
③RDP接続で、root権限(sudo)で実行できない場合
上記と同様のエラーが出るケースで、root権限(sudo実行)の場合は、先の export の設定でもアクセスできません。
これは「セキュリティ上の理由で、デフォルトでは root は root 以外のユーザーが起動した X サーバーに接続することができません。...」とのこと。
一時的に、実行できるようにします。
$ xhost si:localuser:root
$ sudo XXXXX ← 実行したい、GUIアプリケーション
アプリ実行が終了して元に戻すには、下記コマンドを設定します。
$ xhost -si:localuser:root
※ ちなみに、VNCでログインした場合は、普通にGUIアプリが使えました。リモートの実行方法が違うので(本体で動作している画面を転送しているだけ)当然...なのかな?
ほな、さいなら
======= <<注釈>>=======
※1 P子「Windowsからアクセスできれば楽よね」
P子とは、私があこがれているツンデレPythonの仮想女性の心の声です。
修正:2022/5/21
ディスクトップ → デスクトップ 修正
(編)様、ご指摘ありがとうございました。