LinuxとWindowsのシリアルポートの違い
「シリアルポート」は、外部のデバイスとPCが通信するためのインターフェースです。例えば、古いマウスやモデムがこのポートを使って接続されます。
Windowsでは、これを「COMポート」と呼びますが、Linuxでは異なる方式で扱われ、/dev/ttyS0
のように「/dev/tty
」という名前で識別されます。この違いを理解することで、Linuxのシステムに接続されたシリアルデバイスを正しく操作できるようになります。
シリアルポートを操作するためのソフトウェア
Linuxでは、シリアルポートを操作するために「ターミナルソフト」を使います。たとえば、「gtkterm」というシリアルポートターミナルソフトがありますが、他にも使えるツールがあります。以下に代表的な選択肢を挙げます。
minicom:より高度なシリアル通信が必要な場合に使うことができるツール。ログの保存や通信設定の細かい調整が可能です。
gtkterm:基本的なシリアルポート操作に適した軽量なソフトウェア。初心者にも比較的使いやすい。

/dev/tty
とは?
Linuxでは、すべてのデバイスが「ファイル」として扱われます。つまり、デバイスはファイルシステム上でファイルのように見える形で認識されます。シリアルポートも例外ではなく、/dev/ttyS0
や/dev/ttyUSB0
という名前で存在します。
たとえば、/dev/ttyS0
は最初のシリアルポート、/dev/ttyUSB0
はUSB接続のシリアルデバイスです。このファイルにデータを書き込むことで、シリアルポートを通じてデバイスと通信できるようになります。簡単な図解を用いると以下のような感じでしょうか。
[PC] --- COMポート (WindowsではCOM1, COM2)
|
----> [Linux] --- /dev/ttyS0 (シリアルポート1)
/dev/ttyUSB0 (USB接続シリアルデバイス)
しかし、インストールしたソフトを起動すると権限がないらしくエラーが発生します。
cannot open /dev/ttyS0: Permission denied
エラー:cannot open /dev/ttyS0
このエラーは、システムがシリアルポートにアクセスするための「権限」がない場合に発生します。Linuxでは、重要なファイルやデバイスにアクセスするためには「管理者権限」が必要です。/dev/ttyS0
はシリアルポートデバイスなので、一般ユーザーにはアクセスが制限されています。
これを解決するためには、シリアルポートに誰でもアクセスできるように「権限」を付与する必要があります。そのために、次のコマンドを実行します。
sudo chmod 666 /dev/ttyS0
なぜsudo
が必要なのか?sudo
は「管理者権限でコマンドを実行する」ためのコマンドです。この場合、シリアルポートへのアクセスを許可するために管理者権限が必要です。chmod 666
は、このデバイスファイルに「全ユーザーに読み書き権限を与える」という意味です。
すると、エラーは解消され接続できました。このPCにはシリアルポートが3つあるので状態を確認します。念のため数字を増やして確認します。
シリアルポートの状態を確認するためにsetserial
コマンドを使います。このコマンドは、シリアルポートに関する情報を表示します。まず、setserial
がインストールされていない場合は、以下のコマンドでインストールしてください。
sudo apt install setserial
インストール後、以下のコマンドを実行してシリアルポートの状態を確認します。
setserial -g /dev/ttyS[0123]

再起動後も権限を維持する方法
シリアルポートの権限は、再起動すると元に戻ってしまいます。再起動後も自動的にこの権限を適用するには、次の手順で設定ファイルにコマンドを追加できます。
/etc/rc.local
ファイルを編集します(sudo
が必要です)。sudo nano /etc/rc.local
- ファイルの最後に以下のコマンドを追加します。
chmod 666 /dev/ttyS0
chmod 666 /dev/ttyS1
chmod 666 /dev/ttyS2
- 編集を保存して終了します。
これで、再起動後もシリアルポートの権限が保持されます。
次に、LinuxでWindowsソフトを動かすために「Wine」を使います。ここでは、Windows用のシリアル通信ソフト「TeraTerm」をインストールして確認します。
Wineとは?
Wineは、Linux上でWindowsのソフトウェアを動かすことができる便利なツールです。Wineを使うことで、Windows専用のソフトをインストールして使えるようになります。詳しくは、こちらの私のブログでWineの詳細について解説しているので、興味がある方はそちらも参考にしてください。
TeraTermのインストールとシリアルポート確認
Wineを使ってTeraTermをインストールすると、Windowsと同じようにシリアルポート(COMポート)が「com1」や「com2」として表示されます。この設定は、Linuxのシリアルポート(/dev/ttyS0
など)がWindows風のCOMポートに対応しているためです。

シリアルポートの構成確認
Wineは、LinuxのシリアルポートをCOMポートとして認識させます。具体的な構成は、ホームディレクトリ内の以下のパスで確認できます。
~/.wine/dosdevices
このディレクトリ内には、Linuxのシリアルポート(例:/dev/ttyS0
)とWindowsのCOMポート(例:com1
)が対応して表示されています。例えば、/dev/ttyS0
はcom1
に対応しており、通常のWindowsと同様に利用できます。

ttyS0がcom1に対応しており、com0がないせいか番号が1つずれているようです。
Wineとgtktermを使った通信の確認
最後に、Wineを使ってインストールしたTeraTermと、Linuxにインストールしたgtkterm
を使って、シリアルポートを通じた通信が可能であることを確認しました。LinuxとWindows環境のソフトウェアを組み合わせてシリアル通信を行うことができます。
