LinuxでBTテザリングへの接続は簡単に出来た。
今度はこれを簡単にOn/Offしたい。
ネットワークのコマンドライン操作。
それっぽいキーワードでぐぐったら大体そのまんまの内容がヒットした。
nmcliコマンドを使え、とのこと。
nmcliの使い方
具体的にはnmcliでの接続操作はconnectionオブジェクトに対して、指定の接続のup/downを命じる、ということらしい。
接続時には下記のように、切断したい時はupに変えてdown。
$ nmcli -t con up "id"
接続には必要なidは下記手順で確認。
日本語環境であれば「名前」のところに表示される名称を使用する。
当然ながら予めBTデバイスとのペアリング、接続を1回は行っていることが前提の手順。
ペアリングやNetworkManagerの登録もCUIで!というお話は本項の範疇外。
$ nmcli c
名前 UUID タイプ デバイス
XXXXXXXXXXXX UUIDがなんとか bluetooth XX:XX:XX:XX:XX:XX
スクリプト化
up/downで想定通りの動作をすることが確認できたのでスクリプト化。
GUI環境のショートカットキーでトグル動作してほしい、という仕様で以下のスクリプトを作成、ショートカットとして登録。
実はBTデバイスには特化していないので接続名称とデバイス名さえ適切に設定すれば他のネットワークデバイスでも動作する、はず。
# !/bin/sh
# =====================================
# ======= settings ====================
NW_NAME="接続名称"
# =====================================
UP_DOWN="up"
LANG=C nmcli d | grep "$NW_NAME"
if [ $? -eq 0 ] ; then
UP_DOWN="down"
fi
nmcli -t con $UP_DOWN "$NW_NAME"
トグル動作のためにnmcli dの実行結果を見ている。
接続の有無それぞれの状態でnmcli dを実行すればわかるが、接続が確立している場合のみ、出力に接続名称が現れることを利用。
名前の被り等は考慮していないので、厳密にやるのであればもうひと工夫必要。
nmcliについて
以下、備忘を兼ねて
インストール
Debian系ではnmcliはnetwork-managerパッケージの一部。
ということで、今時なGUIを導入している環境であれば、大抵のところでそのまま使えそう。
$ dpkg -S nmcli
network-manager: /usr/share/bash-completion/completions/nmcli
network-manager: /usr/share/man/man1/nmcli.1.gz
network-manager: /usr/share/man/man5/nmcli-examples.5.gz
network-manager: /usr/bin/nmcli
使い方
詳しくはmanしていただくとして、引数なしで実行するとUsageが表示される。
名前通りNetworkManagerのCUIフロントエンドということで多数のオプションあり。
多用しそうなものは今回も使用したn(networking)、c(connection)あたりだろうか?
$ nmcli
Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }
OPTIONS
-t[erse] terse output
-p[retty] pretty output
-m[ode] tabular|multiline output mode
-f[ields] <field1,field2,...>|all|common specify fields to output
-e[scape] yes|no escape columns separators in values
-n[ocheck] don't check nmcli and NetworkManager versions
-a[sk] ask for missing parameters
-w[ait] <seconds> set timeout waiting for finishing operations
-v[ersion] show program version
-h[elp] print this help
OBJECT
g[eneral] NetworkManager's general status and operations
n[etworking] overall networking control
r[adio] NetworkManager radio switches
c[onnection] NetworkManager's connections
d[evice] devices managed by NetworkManager
a[gent] NetworkManager secret agent or polkit agent