[TailScale] iPhoneとLinux間でのファイル転送(TailDrop)

最近、Wiregrardの技術を使ったVPNサービスであるTailscaleに興味を持って色々触っていますがずっと課題に感じていた iPhone ⇔ Linux 間でのデータ転送を簡単に P2P で実行することとができました。TailScaleは、基本はP2PでのPVNを簡単に作ることができるサービスです。認証部分はTailScaleのサービスがGoogle認証などを促しクライアントに情報を伝達し、通信自体はP2Pで行われる形になる形式の模様です。(TailScaleは認可を担っている)

Install&Howto

この転送機能をtailscaleでは、taildrop (AirDropのもじりですね)と呼んでいます。
https://tailscale.com/kb/1106/taildrop/?tab=macos
内容はこの公式ガイドライン通りなので少しなぞって説明しておきます。

Linux

Linux側の導入は、公式ガイドに沿って実施すれば問題ありません。https://tailscale.com/download/linux 今回はマニュアルでインストールしました。プルダウンから該当するディストリビューションの種類を選んで実行します。

Linux側の注意点としては、tailscale自体が root権限で動いている点です。そのため受信したファイルは root権限のファイルとなっていまいます。接続(tailscale up)後に以下のコマンドで受信ができます。

~/D/tmp
❯❯❯ sudo tailscale file get .

上記のコマンドで受信モードになります。ディレクトリ内のファイルの権限は注意

-rw-r--r-- 1 root root 49212 1月 23 20:22 IMG_7881.PNG
-rw-r--r-- 1 root root 1293555 1月 23 20:15 IMG_7918.PNG

上記実施後、tailscale file コマンドは終了します。

P2Pと言いながらも以前に送信したものが送られてくる感じのタイミングがありました。(tailscale file get を後で実行したら)TialDrop自体のデータがどこかを経由してキャッシュしているのかそのタイミングでiPhone側から送られてきているのかちょっと未検証

iPhone

導入は以下のQRコードで読み取ったAppStoreのアプリをいれるだけす。

アプリは「VPN」アプリとして登録されますので、「設定」→「VPN」でON/OFFすることができます。他のVPNアプリと違って右上にvpnのマークが出てこないため接続されていることを認識しづらさがありますが基本的には使い方は同じで利用したいときだけONにしておけばよいです。
TailDropのやり方は、通常のアプリ共有と同じ方法でできます。複数のファイルを一度に送ることもできますので非常に便利

注意点

便利なtailscaleですが、ローカルのデーモンは root権限で動作します。このため認可を行っているtailscaleやローカルのデーモンのセキュリティホールなどが見つかった場合には非常に危険な動作となります。これらのことを理解したうえで、なるべくであればモジュールのUpdateなどは毎日行う事ができる環境のマシンに導入することを強くおすすめします。

Waylandで簡単にMouseのボタンにキーを割り当てる

やりたいことは、マウスについてる追加のボタンの操作でワークスペースを上下に移動したい。ということです。POP_OS上の設定でGnomeのそれぞれのアクションを ctrl+super+pageUp/Down に割り当てていることを前提にしています。

sudo apt install input-remapper

input-remapper-gtk コマンドでGUIを起動することが出来ます。

右の change key をクリックし、実際のボタンを押してその後 keyboard の箇所で設定をすることになります。

上のように、バインドするキーは手入力ですがサジェストが出てくるので困らないと思います。Applyがボタンになっているので押すと設定がされます。

autoload をONにして、Apply を押しておけば問題ありません。これだけで簡単にマッピングできます。

変更できる選択肢には input デバイスが皆出てきているので意外な使い方ができるかもしれませんね。ちょっとしたマクロなどは こちら を参考に設定することができそうです

[Linux]udevを使ってUSB Keyboard のキーマップを変更する.

Linuxのキーマップを変更する方法はいくつかあるのですが、Xの設定ですると意外にハマるので udevを使って根本から変更していきます。

  • USB KeyBoard : NIZ ATOM66
  • OS : POP OS 22.04

最終的なものは以下のファイル /etc/udev/hwdb.d/90-bluetoothkey.hwdb を作成します

evdev:input:b0005v05ACp0110e0100*
  KEYBOARD_KEY_700e6=rightalt
  KEYBOARD_KEY_700e4=hiragana
  KEYBOARD_KEY_700e3=katakana
  KEYBOARD_KEY_700e2=leftmeta
  KEYBOARD_KEY_700e0=capslock
  KEYBOARD_KEY_70039=leftctrl

設定内容を更新するためには systemd-hwdb update && udevadm trigger で実施します

設定ファイルの中身を見ていく前に、1行目の evdev のあとの番号を調べるのが結構手間なのですが以下のコマンドを実行してからBluetoothを接続すると情報がだらだらっと出てきます。これの input の項目が該当します。

❯❯❯ sudo udevadm monitor --environment | grep -i modalias
MODALIAS=hid:b0005g0001v000005ACp00000110
MODALIAS=input:b0005v05ACp0110e0100-e0,1,2,3,4,11,14,k71,72,73,74,77,7D,7E,7F,80,82,83,85,86,87,88,89,8A,8B,8C,8E,8F,90,96,98,9B,9C,9E,9F,A1,A3,A4,A5,A6,A7,A8,A9,AB,AC,AD,AE,B1,B2,B5,CE,CF,D0,D1,D2,D4,D8,D9,DB,E0,E1,E4,E5,E6,EA,EB,F0,F1,F4,100,161,162,166,16A,16E,172,174,176,177,178,179,17A,17B,17C,17D,17F,180,182,183,185,188,189,18C,18D,18E,18F,190,191,192,193,195,197,198,199,19A,19C,1A0,1A1,1A2,1A3,1A4,1A5,1A6,1A7,1A8,1A9,1AA,1AB,1AC,1AD,1AE,1AF,1B0,1B1,1B7,1BA,240,241,242,243,244,245,246,247,249,24A,250,251,r6,C,a20,m4,l0,1,2,3,4,sfw
MODALIAS=input:b0005v05ACp0110e0100-e0,1,2,4,k110,111,112,r0,1,8,B,am4,lsfw
MODALIAS=hid:b0005g0001v000005ACp00000110
MODALIAS=hid:b0005g0001v000005ACp00000110
MODALIAS=input:b0005v05ACp0110e0100-e0,1,2,3,4,11,14,k71,72,73,74,77,7D,7E,7F,80,82,83,85,86,87,88,89,8A,8B,8C,8E,8F,90,96,98,9B,9C,9E,9F,A1,A3,A4,A5,A6,A7,A8,A9,AB,AC,AD,AE,B1,B2,B5,CE,CF,D0,D1,D2,D4,D8,D9,DB,E0,E1,E4,E5,E6,EA,EB,F0,F1,F4,100,161,162,166,16A,16E,172,174,176,177,178,179,17A,17B,17C,17D,17F,180,182,183,185,188,189,18C,18D,18E,18F,190,191,192,193,195,197,198,199,19A,19C,1A0,1A1,1A2,1A3,1A4,1A5,1A6,1A7,1A8,1A9,1AA,1AB,1AC,1AD,1AE,1AF,1B0,1B1,1B7,1BA,240,241,242,243,244,245,246,247,249,24A,250,251,r6,C,a20,m4,l0,1,2,3,4,sfw
MODALIAS=input:b0005v05ACp0110e0100-e0,1,2,4,k110,111,112,r0,1,8,B,am4,lsfw
MODALIAS=hid:b0005g0001v000005ACp00000110

次にどのキーを変更するかは evtest でわかります。適切なInputを選択します。

❯❯❯ sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: Lid Switch
 (略)
/dev/input/event19: Bluetooth Keyboard
/dev/input/event20: Bluetooth Keyboard Mouse
Select the device event number [0-20]: 19
Input driver version is 1.0.1
Input device ID: bus 0x5 vendor 0x5ac product 0x110 version 0x100
Input device name: "Bluetooth Keyboard"
Supported events:

キーボードのキーを打つと以下のように出てきます。この1行目の最後の値がキーコードになります。以下の例では 700e4 が該当します。これを hiragana キーに変換しているという内容です。

Event: time 1673948095.958733, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e4
Event: time 1673948095.958733, type 1 (EV_KEY), code 91 (KEY_HIRAGANA), value 0
Event: time 1673948095.958733, -------------- SYN_REPORT ------------

以上で変更ができます。updateコマンドを実行するのをお忘れなく