smbfs, smbclient はネットワーク接続が可能な X680x0 から、ネットワーク上の Windows ファイル共有 (SMB) サーバにアクセスするためのツールです。
smbfs は、SMB ファイルシステムドライバです。 smbfs.x をデバイスドライバとして常駐させた後、smbmount.x コマンドによって Windows ファイル共有サーバ上の共有フォルダをマウントし、通常のファイルシステムと同様にファイル操作を行うことができます。
smbclient は、SMB サーバにアクセスするためのコマンドラインツールです。 Linux/UNIX 系 OS 向け SMB サーバ/クライアントソフトウェア Samba に含まれている smbclient コマンドと同様に、コマンドラインから Windows ファイル共有サーバに接続して共有フォルダ内のファイル操作を行うことができます。
動作には、 http://retropc.net/x68000/software/internet/kg/tcppacka/ で無償配布されている (株)計測技研製 Human68k 用 TCP/IP ドライバまたはその互換ドライバと、このドライバに対応したネットワークアダプタ、およびそのドライバが必要になります。
以下のようなネットワークアダプタが利用できます(動作は XM6 TypeG, X68000 Z + ZUSB で確認)。
- X680x0 実機向け: Neptune-X, Nereid, RaSCSI 等
- X68000 エミュレータ向け: XM6 TypeG (Nereidエミュレーション機能)
- X68000 Z 向け: ZUSB (zusbether) + BUFFALO LUA3-U2_ATX
利用するネットワークアダプタ用ドライバのドキュメントに従って設定を行い、TCPPACKA 付属のコマンドでネットワーク接続ができることを確認してください。
smbfs, smbclient からの接続は Microsoft アカウントをサポートしていないため、接続先の Windows PC にローカルアカウントがない場合には追加して、共有フォルダにそのアカウントへのアクセス権を与える必要があります。
- Windows PC にローカルアカウントを追加します
- [Windows11]ローカルユーザーアカウントの登録方法 などを参考に、任意の名前でローカルアカウントを追加します
- アクセスしたいフォルダに共有設定を行います
- フォルダを右クリック→「プロパティ」→「共有」タブを選択→「詳細な共有」で「このフォルダーを共有する」にチェックを入れ、「アクセス許可」で 1. で追加したローカルアカウントに対して読み取り/書き込みの権限を与えます
環境変数 NTLM_USER_FILE にユーザ名とパスワードを記述したテキストファイルの名前を指定しておくことで、接続の際のパスワードをファイルから読み込むことができます。
(ファイル名はフルパスで指定しないと、実行時のカレントディレクトリから読みに行ってしまうので注意してください)
ファイルには、行ごとに以下のようにドメイン名(省略可能)、ユーザ名、パスワードをコロンで区切って記述します。
[<ドメイン名>]:<ユーザ名>:<パスワード>
smbfs, smbclient は、接続時に指定されたユーザ名がこのファイルに存在する場合に、その行からパスワードを取得して接続に使用します。 パスワードは平文で記述するため、ファイルの取り扱いには注意してください。
smbfs.x をデバイスドライバとして常駐させます。以下のようにコマンドラインから起動します。
(CONFIG.SYS での登録はできません。事前に TCP/IP ドライバが常駐した状態で実行してください。)
smbfs [/u<ドライブ数>] [/r]
/u<ドライブ数>で、smbfs で利用するドライブ数を1~8の範囲で指定します(省略するとドライブ数 1 になります)/rを指定すると、常駐している smbfs を常駐解除します
常駐すると、指定したドライブ数のドライブが smbfs 用に確保されます。
smbmount.x で smbfs で確保したドライブに Windows ファイル共有サーバ上の共有フォルダをマウントします。以下のようにコマンドラインから起動します。
smbmount <接続先URL> [<ドライブ>:] [<オプション>]
<接続先URL> には接続したい SMB サーバを記述します。以下のフォーマットで指定してください。
[smb://][<ドメイン名>;][<ユーザ名>@]<ホスト名>[:<ポート番号>]/<共有名>[/<パス名>]<ユーザ名>には接続に使用するユーザ名を指定します<ホスト名>には接続先サーバ名または IP アドレスを指定します<ポート番号>は省略可能で、指定しない場合にはデフォルトの 445 番ポートが使用されます<共有名>には接続先の共有フォルダ名を指定します<パス名>には接続先の共有フォルダ内のパス名を指定します
<オプション> は以下の通りです。
-U <ユーザ名>[%<パスワード>]: 接続に使用するユーザ名とパスワードを指定します<接続先URL>によるユーザ名指定よりも優先されます- パスワードを省略した場合には接続時にパスワードの入力が求められます
-N: サーバへの接続時にパスワードの入力を求めないようにします
<ドライブ>: には、マウントする smbfs ドライブを指定します。
省略した場合には、最初に見つかった smbfs ドライブを使用します。
マウントしたドライブは、smbmount.x の -D オプションでアンマウントすることができます。
また、smbmount.x を smbumount.x というファイル名に変更すると、アンマウント専用コマンドとして動作します。
smbmount -D [-a] [<ドライブ>:]
smbumount [-a] [<ドライブ>:]
指定したドライブをアンマウントします。
-a オプションを追加すると、すべての smbfs ドライブをアンマウントします。
コマンドラインから以下のように起動します。
smbclient <接続先URL> [<オプション>]
<接続先URL> には接続したい SMB サーバを記述します。以下のフォーマットで指定してください。
[smb://][<ドメイン名>;][<ユーザ名>@]<ホスト名>[:<ポート番号>]/<共有名>[/<パス名>]<ユーザ名>には接続に使用するユーザ名を指定します<ホスト名>には接続先サーバ名または IP アドレスを指定します<ポート番号>は省略可能で、指定しない場合にはデフォルトの 445 番ポートが使用されます<共有名>には接続先の共有フォルダ名を指定します<パス名>には接続先の共有フォルダ内のパス名を指定します
<オプション> は以下の通りです。
-U <ユーザ名>[%<パスワード>]: 接続に使用するユーザ名とパスワードを指定します<接続先URL>によるユーザ名指定よりも優先されます- パスワードを省略した場合には接続時にパスワードの入力が求められます
-N: サーバへの接続時にパスワードの入力を求めないようにします-L: サーバで利用可能なファイル共有一覧を表示します-c <コマンド...>: コマンドを実行します。複数のコマンドを実行する場合にはセミコロン(;)で区切って指定します- -c 以降のすべての引数がコマンドとして扱われるので、オプションの最後に指定してください
コマンドの例:
smbclient smb://user@server/share # 指定した共有フォルダに接続
smbclient user@server -L # サーバで利用可能な共有フォルダ一覧を表示
smbclient smb://server/share -U user%password -c ls; get file.txt
# 指定した共有フォルダに接続し、ファイル一覧を表示した後 file.txt を取得
起動してサーバへの接続に成功すると、以下のような smbclient のコマンドプロンプトが表示されます。
SMB Client - Type 'help' for commands, 'quit' to exit
smb: />
ここでは以下のコマンドが使用できます。
| コマンド | 説明 |
|---|---|
| dir (ls, l) | ディレクトリ内容の表示 |
| chdir (cd) | カレントディレクトリの変更/表示 |
| mkdir (md) | ディレクトリの作成 |
| rmdir (rd) | ディレクトリの削除 |
| del (rm) | ファイルの削除 |
| rename (ren) | ファイル/ディレクトリの名前変更 |
| stat | ファイル/ディレクトリ情報の表示 |
| statvfs (df) | ファイルシステム情報の表示 |
| lcd | ローカルカレントディレクトリの変更/表示 |
| shell (!) | シェルコマンドの実行 |
| get | リモートファイルのダウンロード |
| mget | 複数リモートファイルのダウンロード |
| put | ローカルファイルのアップロード |
| mput | 複数ローカルファイルのアップロード |
| quit (exit) | プログラムの終了 |
| help (?) | ヘルプの表示 |
help <コマンド名> で、各コマンドの詳細な使い方を表示します。
- ファイルアトリビュートの隠しファイルやシステム属性、書き込み禁止属性などは無視されます
- smbfs では、21文字以上のファイル名や2GB以上のサイズのファイルは表示されません。smbclient の dir コマンドでは表示されますが、get, mget コマンド等での取得はできません
- Human68k の DSKFRE が 2GB 以上のディスクサイズを想定していないため、smbfs でのドライブの残容量表示は不正確です
elf2x68k の 20251124 版以降が必要です。
git clone --recursive https://github.com/yunkya2/smbfs.git
で、サブモジュール込みで clone した後、以下のコマンドでビルドします。
make
Human68k のリモートドライブの実装は以下を参考にしています。開発者の皆様に感謝します。
- ぷにぐらま~ずまにゅある by 立花@桑島技研 氏
- XEiJ (X68000 Emulator in Java) by Makoto Kamada 氏
- ソースコード HFS.java
- XM6 TypeG by PI. 氏 & GIMONS 氏
- XM6 version 2.06 ソースコード
Human68k の起動後のブロックデバイスの常駐・解除の実装は susie.x を参考にしています。開発者の GORRY 氏に感謝します。
- susie.x by GORRY 氏
Windows ファイル共有へのアクセスにはライブラリ libsmb2 を使用しています。開発者の Ronnie Sahlberg 氏に感謝します。
- libsmb2 by Ronnie Sahlberg 氏
Copyright (c) 2023,2024,2025 Yuichi Nakamura (@yunkya2)
本プログラムは、オリジナルで開発したソースコードについては MIT ライセンスとします。その他利用されている以下のソフトウェアについては開発元のライセンス条件に従います。
- libsmb2 (LGPL-2.1)
本プログラムは LGPL を採用している libsmb2 を静的リンクしているため、ビルド生成物のバイナリ配布の際には LGPL が適用されます。独自の修正を加えてビルドしたバイナリを配布する際にはソースコードの開示が必要となります。