あんパン

こしあん派

Wi-Fi資格情報の共有方法

週末に妻の友人が家に遊びにくることになった。我が家ではタグVLANでゲストネットワークを作り、それに繋げられる専用のSSID/パスワードを用意している。せっかくならこれを使ってもらいたい。自動生成したパスワードを手打ちするのは面倒なので、簡単に利用してもらえる方法をいくつか試してみた。

QRコードで設定する

ZXingというライブラリの仕様が広く一般に利用されているようで(要出典)、これに沿ってQRコードを作っておけばiOS/AndroidデフォルトのQRコードリーダーでWi-Fiの設定をすることができる。

具体的には以下のようなテキストをQRコード化しておけば良い。

WIFI:T:WPA;S:${SSID};P:${PASSWORD};;

ポストカードに印刷するのもよさそう。

NFCで設定する (主にAndroid向け)

NFCに資格情報を書き込み、端末でタッチすることでWi-Fiの設定をすることもできる。先日偶然NFCのシールを購入していたのでこれに書き込んでみる。書き込みはNFC Toolsというアプリが一般に使われていそう? なのでこれを利用する。

NFC Tools

NFC Tools

  • wakdev
  • ユーティリティ
  • 無料
apps.apple.com

play.google.com

Wi-Fiの設定を作って書き込み / 読み込み / Androidで読み込んだスクリーンショット

Androidは標準でNFCからWi-Fiを設定する機能が組み込まれているけれど、iOSには存在しない。なので、わざわざアプリを入れないと設定できないのが難しいポイント。

構成プロファイルを用意する (iOSとmacOSのみ)

まあこれは無いかな〜と思うんだけど一応。

macOSのApp StoreでApple Configuratorをダウンロードして、構成プロファイルを作ることができる。

Apple Configurator

Apple Configurator

  • Apple
  • ユーティリティ
  • 無料
apps.apple.com

これをAirDropでiOSやmacOSに転送してあげると、Wi-Fiの設定をすることができる。

Apple Configuratorで構成プロファイルを作る

1Passwordで共有する

最近は1Passwordが結構よくなっていて、1Passwordのアカウントを持っていない相手にも共有できるようになっている。ただし、相手のメールアドレスを知っていることが前提となる。メールアドレスを入力してリンクを生成し、これを共有する。

共有された側はメールアドレスを入力すると認証コードが届くので、これを入力する。

共有する側、される側

これでWebブラウザ上でパスワードを確認できる。

表示されたSSIDとパスワード

相手のメールアドレスを知っていて、かつこういう操作に苦がないならこれが一番良いのではないか。


いろいろ試してみたけど、スマートフォンに関してはQRコードが一番簡単であろうから、これを用意することにした。Switchとかゲーム機を繋ぎたいということになったら、自分の1Passwordに入れておいた資格情報を見せて直接手入力してもらうことになるかなー。

保存していないファイルでvim-quickrunを実行する

めちゃくちゃ小ネタだけど便利に使っているので。

vim-quickrunはこれ。vim-plugなりなんなりで入れましょう。

github.com

普通は保存してるファイルを開いて実行するとかそういう感じだと思うんだけど、保存せずにその場でシュッと実行したいことがある。保存していない状態だとquickrunが何を実行すればいいのか認識してくれないので :set ft=sh とかして拡張子を指定してあげればその場で実行できる。

特定の文字列を一気に編集してその場で実行したい、とかのときに便利。具体的には

hello,world,hoge,fuga

みたいな文字列があったとして :%s/,/\n/ で行を分割して

hello
world
hoge
fuga

vim-surroundで文字列として包んで

"hello"
"world"
"hoge"
"fuga"

visual blockで一気に編集して

open "https://google.com/search?q=hello"
open "https://google.com/search?q=world"
open "https://google.com/search?q=hoge"
open "https://google.com/search?q=fuga"

これでquickrunすると一気に検索結果を開ける、みたいな……

xargsとか駆使すれば同様のことはできるけど、手札として持っておけると結構便利。

iPhoneとRaspberry PiでWOLのパケットを送ってWindows端末を起動する

最近iPhone 14 Pro Maxを購入した。写真を撮るためだとかマンガを読むためだとかいろいろ理由をつけて買ったが実のところRemote DesktopでWindowsに繋いで適度なサイズの画面でノベルゲームをしたかったのだった。

Remote Desktopで接続することはできたが、しばらく放置しているとスリープ状態になってしまい、わざわざ机の下にあるWindows端末の電源ボタンを押さないといけない。布団でぬくぬくゲームをしようというときにわざわざ出るのは面倒なのでiPhoneから起動できるようにした。いまも昔もこういう操作をシュッとやるならWake-on-LANと相場が決まっている。この記事はWake-on-LANをiPhoneからやろうという話。

iOS向けのアプリとしてWOLのマジックパケットを送出できるものはあるけれど、得体の知れないものを入れるのはやや抵抗がある。最近のiOSには純正のショートカットアプリがあり、SSHで任意のコマンドを発行できるので、これを利用してRaspberry Pi上からマジックパケットを送出するのがよかろうと考えた。いまやRaspberry Piはどこにも在庫がないけど、手元にいくつか余っているのでこれを利用した。Raspberry PiでなくてもNano PiやOrange Piとかでもだいたい同じことができるはず。

WOLの設定

Windows上で、まずはIPをDHCPではなく固定にしておく。続いてデバイスマネージャから利用している有線LANのインターフェースのプロパティを開き、WOLを有効にしておく。加えて、UEFIの設定でもWOLを有効にする。このあたりはマザーボードによって違いそう。最後にインターフェースのMACアドレスを控えておく。マジックパケットはこのMACアドレス宛に送ることになる。

この状態で動くかどうかを確認しておくと良い。Arch Linuxであれば wol コマンドでマジックパケットを送出できる。

$ wol MAC_ADDR

スリープや休止状態であれば復帰できたが、完全に止めた状態から起動することはできなかった。そういうものだった気がする。

Raspberry Piの初期設定

masawada.hatenablog.jp

以前書いた通りRaspberry Pi用のSDカードはRaspberry Pi Imagerで作ることができる。最近はSSH用のパスワードの設定などもできて便利。できあがったSDカードの / 直下に touch ssh などでsshという名前の空ファイルを作っておけば立ち上げ時にsshdも起動する。

Raspberry Piは起動するとDHCPでIPを取得しにいくので、 arp-scan でこれを確認してsshする。

$ sudo arp-scan -l
Interface: eno1, type: EN10MB, MAC: **:**:**:**:**:**, IPv4: 192.168.0.101
Starting arp-scan 1.9.8 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.0.1     **:**:**:**:**:**       YAMAHA CORPORATION
192.168.0.10    **:**:**:**:**:**       ASRock Incorporation
192.168.0.102   **:**:**:**:**:**       Raspberry Pi Foundation

こういう調子。このIPにSSHで接続して、さらにIPを固定にする。 /etc/dhcpcd.conf を編集しつつ再起動すればOK。最後にWOLのマジックパケットを送出するアプリケーションを入れておく。

$ sudo apt install wakeonlan

iOSの設定

ショートカットアプリを開いて新規ショートカットを作成し、以下のように設定を行う。

MACアドレスやホストなどは環境に応じた値を入れる

SSH用の鍵はiOS側が生成してくれるので、公開鍵をコピーしてRaspberry Pi側に登録しておく。

あとはこのショートカットを実行すれば、Windowsが起動する。

SSHで任意のコマンドを実行できるので応用の幅が広くて便利そう。

スペース区切りの文字列を2つずつ取って表示

usbhid-dumpでdumpしたUSBのreport descriptorを見るとき、2byteで1セットになることが多い(当然例外はめっちゃあるが…)ので一旦2項目ずつに整理して見てみたい。つまり

003:007:000:DESCRIPTOR         1668742987.009398
 05 01 09 06 A1 01 05 07 19 E0 29 E7 15 00 25 01
 75 01 95 08 81 02 75 08 95 01 81 01 05 08 19 01
 29 05 75 01 95 05 91 02 75 03 95 01 91 01 05 07
 19 00 2A FF 00 15 00 26 FF 00 75 08 95 06 81 00
 C0

これを

05 01
09 06
A1 01
05 07
...
75 08
95 06
81 00
C0

こうしたい。間違ってるところはあとで修正する前提。Rubyだと近いことを Enumerable#each_slice でできる。

シュッとワンライナー書けないかな〜と思っていたところ、xargsでそれっぽいことができそうだった。05 01 09 ... をクリップボードに入れておいて

$ xsel -ob | sed 's/ /\n/g' | grep -v '^$' | xargs -L2 echo
05 01
09 06
A1 01
05 07
...
75 08
95 06
81 00
C0

という調子。xargsの -L オプションを指定すると一回で複数の引数を取って展開してくれるので、単純にこれをechoする。普段便利に使ってるコマンドでも意外と知らないオプションがある。


そしてこの記事を書き終えた後に

$ sudo usbhid-dump -e descriptor -a ***:*** | grep -v : | xxd -r -p | hidrd-convert -o code
0x05, 0x01,         /*  Usage Page (Desktop),               */
0x09, 0x02,         /*  Usage (Mouse),                      */
0xA1, 0x01,         /*  Collection (Application),           */
0x09, 0x01,         /*      Usage (Pointer),                */

で一番やりたかったことができるのを知るのであった……

ちょっとした計算をしてクリップボードに入れたいとき

どうやってますか?

案A: Google検索して結果をコピー

このフォームからコピー。ずっとChrome開いてるので導線としては近いけどやや手間。

案B: ランチャーを利用

macOSにおいてはAlfredであれば計算してreturnを押せばコピーできたはず。

Linuxにおいてはrofiを使ってるならrofi-calcを使うとよさそう。

github.com

The following example copies the result to the clipboard upon pressing the key combination defined by -kb-accept-custom (by default Control+Return). NOTE: {result} should be quoted since it may contain characters that your shell would otherwise interpret: rofi -show calc -modi calc -no-show-match -no-sort -calc-command "echo -n '{result}' | xclip" https://github.com/svenstaro/rofi-calc#advanced-usage

が、combiで起動するとうまくいかなかったりしてややムズい。calc単体で立ち上げるショートカットを作るのはやや大仰すぎる。

Windowsはあんまり使ってないのでよく分からない。

案C: 適当なワンライナーを利用する

$ perl -e 'print 100 * 200' | tee >(pbcopy); echo

Linuxならクリップボードに入れる部分は >(xsel -ib) とかかな。

自分の場合はこれをさらにラップして

#!/bin/bash

EXPR="$@"; perl -e "print $EXPR" | tee >(xsel -ib); echo;

こういう感じで p みたいな名前で保存して実行権限をつけておいて

$ p '100 * 200'
20000

みたいにできている(が、あんまり使ってない……)。* は素のまま書いてしまうとシェル側で展開されてしまうので '' で囲う必要がありやや面倒。


  • 導線が近い
  • ツールとして使いやすい
    • とにかく計算式だけ入れてreturn押したらなんとかなる

くらいが求められていそうだけど、現状の手札はどれも一長一短でもうすこしいい感じになりたい。オススメ手法を募集しています。