RaspberryPiとMac間のファイル共有方法9選
はじめに
久しぶりの更新になってしまいました。。RaspberryPi で遊んでるとPCとファイルのやり取りをしたくなる場面がちょくちょく出てきます。コマンドでの送信、WebアプリやGUIツールでの方法などいくつかあるようなので調べてみた方法を9個まとめておきます。
環境
リソース | 内容 |
---|---|
本体 | Raspberry Pi4 Model B 4GB RAM |
OS | BerryBoot 上のRaspberry Pi OS 64bit |
ネットワーク | 同一ネットワーク上のノード間で転送 |
※今回はセキュリティに関する設定は省略します。
コマンドで転送
scpコマンド
ssh接続できる状態であればMac,ラズパイ共に転送用のソフトをインストールせずに送ることができる一番オーソドックス?な方法です。
送り元から送り先へssh接続できる必要があります。
MacからRaspberryPiへ"test.txt"を転送するには以下のようになります。
# Macのコンソールで実行する場合 $ scp -i ~/.ssh/id_rsa_pi -P 22 test.txt matu@raspberrypi.local:/home/matu # RaspberryPi のコンソールで実行する場合 $ scp matu@192.168.0.2:/Users/matu/test.txt /home/matu
引数は "scp {送信元} {送信先}" でcpコマンドと同じ感覚で転送できます。
リモート先の指定は "{ユーザ名}@{ホスト名 or IPアドレス}:{転送先フォルダ}" です。
コマンドオプション
オプション | 内容 |
---|---|
-i | 鍵ファイル指定 (設定してなければ省略可) |
-P | ポート指定 (デフォルトの22であれば省略可) |
-r | フォルダを再起的にコピー |
-p | パーミッションなどのメタ情報もコピー |
最近では非推奨なコマンドになってるようで、sftp, rsync が代替コマンドのようです。
sftpコマンド
代替コマンド一つ目です。使い方はftpコマンドと同じ感覚でサーバにログインしてからput, get コマンドでファイルをやり取りします。 以下ではファイルをサーバに送って、同じファイルを別名でダウンロードしています。
$ sftp -P 22 -i ~/.ssh/id_rsa_pi -C matu@raspberrypi.local sftp> cd /home/matu sftp> put test.txt sftp> get test.txt ./test2.txt sftp> exit
コマンドオプション
オプション | 内容 |
---|---|
-i | 鍵ファイル指定 (設定してなければ省略可) |
-P | ポート指定 (デフォルトの22であれば省略可) |
-C | データの圧縮転送 |
rsyncコマンド
もう一つのscp代替コマンドです。こちらはワンライナーで送れます。
$ rsync -avhz -e 'ssh -p 22 -i ~/.ssh/id_rsa_pi' ./test.txt matu@raspberrypi.local:/home/matu
コマンドオプション
オプション | 内容 |
---|---|
-a | パーミッションなどのメタ情報をコピー (別オプションで所有者のみコピーなども可能) |
-v | 詳細を表示 |
-h | ファイルサイズを見やすくする |
-z | データの圧縮転送 |
ファイル共有プロトコルで転送
afp(Apple Filing Protocol) とnetatalk
Mac でファイル共有するafpを使って転送します。ラズパイのフォルダを共有します。ラズパイ側はafp が使えるようにするnetatalk をインストールします。
$ sudo apt install netatalk
インストールしたら「/etc/netatalk/afp.conf」 を編集して共有したいフォルダを設定します。
変更前
;[Homes] ;basedir regex = /xxxx
変更後
; コメントインして共有したいフォルダを指定します。とりあえずホームディレクトリにします。 [Homes] basedir regex = /home/matu
あとはMacのFinderで接続します。
メニュー> 移動> サーバへ接続(⌘K)で「afp://raspberrypi.local」と入力します。IPでもOKです。
ラズパイ側のパスワードを入力します。
1回設定すればいつでもアクセスできるので楽ちんです。
Mac側でファイル共有
ラズパイ側じゃなくMac側のフォルダを共有する方法です。システム環境設定にある「共有」でMac側のフォルダを共有します。
「ファイル共有」にチェックして共有したいフォルダを追加すると接続先が表示されるので、ラズパイのファイルマネージャからアクセスします。
ファイルマネージャを起動し接続先をアドレスバーに入力します。
Macで共有したフォルダを選択するとファイル が表示されます。
smb(samba)
有名なファイルサーバソフトでラズパイ側を共有します。ざっくり以下の手順で設定します。
- ラズパイにsambaインストール
- samba設定ファイル編集
- sambaパスワード設定
- Macからアクセス
インストールはaptで済ませます。
$ sudo apt install samba $ smbd -V Version 4.9.5-Debian
インストール中に「あなたのコンピュータがネットワーク上の DHCP サーバから・・・」と聞かれますが、ここでは「いいえ」にしました。
次に設定ファイル「/etc/samba/smb.conf」を編集します。 以下の内容を末尾に追記します。
[raspi] comment = raspi4 # 共有内容のコメント path = /home/pi # 共有したいフォルダを設定 guest ok = no # yesにするとパスワードなしで接続(デフォルト:no) read only = no # yesにするとファイルの作成、修正ができなくなる (デフォルト:yes)
続いてパスワードの設定です。
$ sudo smbpasswd -a matu New SMB password: Retype new SMB password: Added user matu. $ sudo systemctl restart smbd
あとはMacからはFinderでアクセスします。メニュー> 移動> サーバへ接続(⌘K)で「smb://raspberrypi.local」を入力します。IPでもOKです。
先ほど設定したパスワードを入力するとファイルが表示されます。
ツールで転送
File Browser
Webアプリの「File Browser」でラズパイのフォルダを共有します。 DockerHub にもコンテナがアップされてましたがarmのアーキがなかったので、とりあえずラズパイに直にインストールします。
公式ドキュメントの通りインストールします。
$ curl -fsSL https://filebrowser.org/get.sh | bash
起動時に -r を指定して共有するフォルダを指定します。
$ filebrowser -r /home/matu
ラズパイのchromium で「http://localhost:8080」にアクセスします。
初期ユーザ名とパスワードはadmin / admin のようです。
Macからアクセスする場合はURLの"localhost"をIPかホスト名にすればOKです。 今回は割愛しますが、ポートのやログの設定もできるようです。
iptux
「iptux」はチャットツールでLinux版のIP Messenger ?です。
$ sudo apt install iptux
スタートメニューから起動します。
Mac側はIP MessengerのMac版を使います。
Macからメッセージを受信したところです。
ファイル送信はFilesをクリックするとファイル選択ができるので、送りたいファイルを選んで送信します。
私の環境ではメッセージはラズパイ、Mac共に送受信できましたが、ファイルの送信はなぜかラズパイからMacへしかできず。。双方向で送れるとかなり便利なんですが。。
Real VNC
VNCにもファイル転送機能があります。
こちらを参考にさせていただきました。
まずはラズパイからMacへ送信してみます。ラズパイ側はVNCを有効にしておきます。
$ sudo raspi-config nonint do_vnc 0
Macには以下からクライアントをインストールしておきます。
ファイル送信先のMacクライアントアプリからVNCで接続します。
認証情報を入力します。
接続OKです。
ラズパイ側で右上のアイコンからVNC画面を開きます。
ウィンドウ右上メニューの「File Transfer」から送信します。
ファイルを選択するとすぐに転送されます。
Mac側に即時保存されます。
Macのviewクライアントからも送信可能です。
おまけ
クラウド経由で
- Google Drive, One Drive, iCloudなどクラウドストレージ経由で送る方法です。
一応、バリエーションの一つとして。
- Google Drive, One Drive, iCloudなどクラウドストレージ経由で送る方法です。
SDカード経由で
- 書くまでもないっすね。
Ansible, Chefなどの構成管理ツールで
- 送信内容を作りこむ必要がありますが、一応送れます。
Resilio Sync
- P2Pのファイルの共有ツールです。今回は試しませんでしたが転送速度は早いかもです。