こんにちは!前橋市(苗ヶ島町シャック)からアマチュア無線を運用している無線家です。
前回、エモト(EMOTO)1200FXローテーターをスマホから制御できる「2段プリセット&鉄壁安全装置付きのWEBコントローラー」のコードを公開しました。今回は、このシステムをUbuntu環境にインストールし、PCの電源を入れたら全自動でバックグラウンド起動するまでの完全な構築手順を整理しました。
開発中に遭遇した「自動起動が status=203/EXEC で無限ループに陥る罠」とその回避策(Ubuntu環境での正しいパスの通し方)まで余すことなく解説します!

🛠️ 前提条件と環境
- OS: Ubuntu (Desktop / Server)
- ハードウェア: 制御用PC、エモト1200FX、USBシリアルケーブル(
/dev/ttyUSB0認識) - 必要パッケージ:
Hamlib (rotctl/rotctld),Python3,Flask,pySerial
🚀 ステップ1:必要パッケージのインストール
まずはターミナルを開き、大元となるローテーター制御システム(Hamlib)とPythonの環境をインストールします。
# パッケージリストの更新
sudo apt update
# Hamlibとネットワークユーティリティ、Python関連のインストール
sudo apt install -y hamlib-utils net-tools python3-flask python3-serial
🚀 ステップ2:完成版ソースコードの配置
FlaskバックエンドとiPhone最適化UI(HTML/CSS)が一体となったスクリプトを作成します。
保存先ディレクトリを作成し、コードを書き込みます。
# ディレクトリの作成(ホームディレクトリ以下に作成)
mkdir -p ~/hamlib-web
# ソースコードファイルの作成(流し込み)
cat << 'EOF' > ~/hamlib-web/web_rotator.py
(※ここに前回の最終完成版ソースコードを丸ごと貼り付けます)
EOF
🚀 ステップ3:【最重要】自動起動(systemd)の鉄壁設定
Ubuntuの電源を入れた際、手動でコマンドを叩かなくても裏で「4003番(Hamlib)」と「4004番(WEB画面)」がセットで自動起動するように設定します。
⚠️ 注意!status=203/EXEC エラーの罠
Ubuntu環境では、Hamlibの実行ファイル(rotctld)が /usr/local/bin/rotctld ではなく /usr/bin/rotctld にインストールされます。ここがズレていると自動起動が完全に失敗します。本ガイドでは、確実なパスである /usr/bin/rotctld を指定して設定ファイルを作成します。
① 大元の制御システム(rotctld.service)の作成
以下のコマンドを丸ごとコピー&ペーストして実行します(一般ユーザーのままでも確実に特権で書き込めるよう tee コマンドを使用しています)。
cat << 'EOF' | sudo tee /etc/systemd/system/rotctld.service > /dev/null
[Unit]
Description=Hamlib Rotator Daemon
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/rotctld -m 602 -r /dev/ttyUSB0 -s 9600 -t 4003
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
② WEBコントローラー画面(web-rotator.service)の作成
続いて、スマホに画面を届ける Flask システム側の自動起動ファイルを作成します。
Ubuntu環境のユーザー名(ここでは owner と仮定)に合わせて作成します。
cat << 'EOF' | sudo tee /etc/systemd/system/web-rotator.service > /dev/null
[Unit]
Description=Emoto Rotator Web Controller
After=rotctld.service
[Service]
Type=simple
User=owner
WorkingDirectory=/home/owner/hamlib-web
ExecStart=/usr/bin/python3 web_rotator.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
※ User= および WorkingDirectory= の owner 部分は、ご自身のUbuntuのログインユーザー名に合わせて適宜書き換えてください。
🚀 ステップ4:サービスの有効化と起動
設定ファイルが作れたら、Ubuntuのシステムに登録(有効化)して一斉に起動をかけます。
# 1. systemdの再読み込み
sudo systemctl daemon-reload
# 2. Ubuntu起動時に自動実行されるように有効化
sudo systemctl enable rotctld.service
sudo systemctl enable web-rotator.service
# 3. 今すぐサービスを起動
sudo systemctl start rotctld.service
sudo systemctl start web-rotator.service
🔍 ステップ5:正常稼働しているかのチェック確認
無事に開通したか、通信ポートの待機状態を確認します。Ubuntu標準の ss コマンドを使用します。
sudo ss -tlpn | grep -E "4003|4004"
【正常な表示結果】
以下のように、4003番と4004番の2行が綺麗に「LISTEN」として並んで表示されれば完璧です!
LISTEN 0 4 0.0.0.0:4003 0.0.0.0:* users:(("rotctld",pid=xxxx,fd=6))
LISTEN 0 128 0.0.0.0:4004 0.0.0.0:* users:(("python3",pid=xxxx,fd=4))
あとはスマホ(iPhone)のSafariから http://[UbuntuPCのIPアドレス]:4004 にアクセスすれば、スクロールゼロの極上コックピットUIが出現します。
💡 万が一、突然動かなくなった時のお守り
運用中にノイズ等で一時的にフリーズした場合は、以下の「リフレッシュコマンド」を叩くだけで一発復旧します。
sudo systemctl restart rotctld.service
sudo systemctl restart web-rotator.service
自作リモートシャックをUbuntuで構築する方の参考になれば幸いです。
それでは皆様、良いアマチュア無線ライフを! Best 73 & 88, Good DX!!



コメント