matuconとマイコン

ITガジェットが好物です

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です。

f:id:mazcon:20201117090911p:plain

ラズパイ側のパスワードを入力します。

f:id:mazcon:20201117115701p:plain

1回設定すればいつでもアクセスできるので楽ちんです。

f:id:mazcon:20201117090921p:plain

Mac側でファイル共有

ラズパイ側じゃなくMac側のフォルダを共有する方法です。システム環境設定にある「共有」でMac側のフォルダを共有します。

f:id:mazcon:20201117092528p:plainf:id:mazcon:20201117092533p:plain

「ファイル共有」にチェックして共有したいフォルダを追加すると接続先が表示されるので、ラズパイのファイルマネージャからアクセスします。

f:id:mazcon:20201117101716p:plain

ファイルマネージャを起動し接続先をアドレスバーに入力します。

f:id:mazcon:20201117095218p:plain

Macで共有したフォルダを選択するとファイル が表示されます。

f:id:mazcon:20201117095223p:plainf:id:mazcon:20201117095232p:plain

smb(samba)

有名なファイルサーバソフトでラズパイ側を共有します。ざっくり以下の手順で設定します。

  1. ラズパイにsambaインストール
  2. samba設定ファイル編集
  3. sambaパスワード設定
  4. Macからアクセス

インストールはaptで済ませます。

$ sudo apt install samba
$ smbd -V
Version 4.9.5-Debian

インストール中に「あなたのコンピュータがネットワーク上の DHCP サーバから・・・」と聞かれますが、ここでは「いいえ」にしました。

f:id:mazcon:20201117101915p:plain

次に設定ファイル「/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です。

f:id:mazcon:20201117102500p:plainf:id:mazcon:20201117102504p:plainf:id:mazcon:20201117102508p:plain

先ほど設定したパスワードを入力するとファイルが表示されます。

f:id:mazcon:20201117102512p:plain

ツールで転送

File Browser

Webアプリの「File Browser」でラズパイのフォルダを共有します。 DockerHub にもコンテナがアップされてましたがarmのアーキがなかったので、とりあえずラズパイに直にインストールします。

filebrowser.org

公式ドキュメントの通りインストールします。

$ curl -fsSL https://filebrowser.org/get.sh | bash

起動時に -r を指定して共有するフォルダを指定します。

$ filebrowser -r /home/matu

ラズパイのchromium で「http://localhost:8080」にアクセスします。

f:id:mazcon:20201117102954p:plain

初期ユーザ名とパスワードはadmin / admin のようです。

f:id:mazcon:20201117103000p:plain

Macからアクセスする場合はURLの"localhost"をIPかホスト名にすればOKです。 今回は割愛しますが、ポートのやログの設定もできるようです。

iptux

「iptux」はチャットツールでLinux版のIP Messenger ?です。

$ sudo apt install iptux

スタートメニューから起動します。

f:id:mazcon:20201117104316p:plain

Mac側はIP MessengerMac版を使います。

f:id:mazcon:20201117104329p:plain

Macからメッセージを受信したところです。

f:id:mazcon:20201117104321p:plain

ファイル送信はFilesをクリックするとファイル選択ができるので、送りたいファイルを選んで送信します。

f:id:mazcon:20201117104325p:plain

私の環境ではメッセージはラズパイ、Mac共に送受信できましたが、ファイルの送信はなぜかラズパイからMacへしかできず。。双方向で送れるとかなり便利なんですが。。

Real VNC

VNCにもファイル転送機能があります。

こちらを参考にさせていただきました。

jellyware.jp

まずはラズパイからMacへ送信してみます。ラズパイ側はVNCを有効にしておきます。

$ sudo raspi-config nonint do_vnc 0

Macには以下からクライアントをインストールしておきます。

www.realvnc.com

ファイル送信先MacクライアントアプリからVNCで接続します。

f:id:mazcon:20201117112228p:plain

認証情報を入力します。

f:id:mazcon:20201117112232p:plainf:id:mazcon:20201117112240p:plain

接続OKです。

f:id:mazcon:20201117112246p:plain

ラズパイ側で右上のアイコンからVNC画面を開きます。

f:id:mazcon:20201117112252p:plain

ウィンドウ右上メニューの「File Transfer」から送信します。

f:id:mazcon:20201117112259p:plain

ファイルを選択するとすぐに転送されます。

f:id:mazcon:20201117112306p:plain

Mac側に即時保存されます。

f:id:mazcon:20201117112310p:plain

Macのviewクライアントからも送信可能です。

f:id:mazcon:20201117113211p:plain

おまけ

  • クラウド経由で

  • SDカード経由で

    • 書くまでもないっすね。
  • Ansible, Chefなどの構成管理ツールで

    • 送信内容を作りこむ必要がありますが、一応送れます。
  • Resilio Sync

    • P2Pのファイルの共有ツールです。今回は試しませんでしたが転送速度は早いかもです。