Android – matoken's meme https://matoken.org/blog Sat, 04 Jan 2025 21:53:31 +0000 ja hourly 1 https://wordpress.org/?v=6.7.2 AndroidアプリのCan I Driveでお酒を飲んだあといつ頃運転できるか教えてもらう https://matoken.org/blog/2025/01/05/can-i-drive/ https://matoken.org/blog/2025/01/05/can-i-drive/#respond Sat, 04 Jan 2025 21:53:29 +0000 https://matoken.org/blog/?p=4356

ic launcher beer foreground
年末年始はアルコールを摂る機会が増える人が多いと思います.しかしアルコールを摂ると乗り物の運転ができなくなります.どのくらいでアルコールが抜けるかは個人差もありますが目安の計算式があります.でも計算するのは面倒.
ここではAndroidで動作する自分が接種したアルコール量で運転が可能かどうかの目安が簡単にわかるアプリケーションの Can I Drive の紹介をします.

Can I Driveは飲酒中に接種したアルコールをアプリ上で登録することでいつ頃運転できるようになるかの目安時間を計算して表示してくれます.

Can I DriveはF-Droidから入手が可能です,

Can I Driveを起動するとこんな画面が表示されます.まずは左下の人形のアイコンをタップします.

CanIDrive01

利用者の情報を登録します.

Weight

体重

sex

性別

Health

体調

Drive law

運転する法律の国

体重,性別は普通に.体調はその時の体調で調整,国は日本の場合日本を選ぶだけでいいですが,国によっては他にも職業ドライバーであるなどのチェックボックスが表示されたりします.職業ドライバーだと厳しくなるようです.
これらの情報を入力すると準備完了です.右下のチェックアイコンで完了します.

CanIDrive02

Can I Driveのメイン画面に戻ります.メイン画面の右下の+アイコンから接種したアルコールを登録します.

CanIDrive03

いくつかのアルコールプリセットが表示されます.ここから自分の接種したアルコールを登録します.Whenで規定値は現在ですが,過去に遡って登録もできます.

自分でアルコールをプリセットに登録することもできます.例えば以下のように「oyuwari」という名前の130mlアルコール度数10%のアルコールを登録したりできます.

CanIDrive04

アルコールを登録するとメイン画面に戻り,ステータスが表示されます.
以下の例では運転は不可,推定血中アルコール(0.63g/L),運転が可能になる時間(8:36),血中アルコール濃度が0になり酔が覚める時間(11:00)がわかります.

CanIDrive05

アルコールを摂るたびに登録していくとこれらのステータスは更新されていきます.
これにより運転が可能になる時間の目安がわかるようになります.登録してみると夜に飲み会に出て次の日の朝にはまだ運転できそうにないなとかいったことがわかります.

ただし,これはあくまで目安で個人差や体調などで大分変わるでしょう.でも手計算するよりは大文楽で便利です.

]]>
https://matoken.org/blog/2025/01/05/can-i-drive/feed/ 0
Gadgetbridgeのデータ移行 https://matoken.org/blog/2024/12/21/gadgetbridge-data-migration/ https://matoken.org/blog/2024/12/21/gadgetbridge-data-migration/#respond Fri, 20 Dec 2024 21:19:09 +0000 https://matoken.org/blog/?p=4287

ここ2年ちょっとAndroidアプリのGadgetbridgeでスマートウォッチを利用しています.Android本体をリプレースしたのですが,データ移行が面倒で旧Android端末との連携のままでしたが今回データ移行をしました.

基本的に旧端末でデータをエクスポートして,新端末でGadgetbridgeをセットアップしてデータをインポートするだけです.

旧端末での操作

まず旧端末でGadgetbridgeのデータをエクスポートします.

バックアップの前にデータが更新されないようBluetoothをoffにしておきます.

Gadgetbridgeを起動し,の左上の「☰」でメニューを表示,「データの管理」でデータ管理画面に遷移します.

Gadgetbridge export 01

Gadgetbridge export 02

「Backup and Restore」から「Export zip」でデータをエクスポートします.

Gadgetbridge export 03

新端末のセットアップ

Gadgetbridgeの導入

F-DroidからGadgetbrisgeを導入します.

更に旧端末で連携していたアプリケーションがあったらそのアプリも導入してセットアップしておきます.
自分はQuickWeatherやOpenTracksを導入しました.

Gadgetbridgeデータインポート

Gadgetbridgeを起動し,の左上の「☰」でメニューを表示,「データの管理」,「Backup and Restore」から「Import zip」でデータをインポートします.

Gadgetbridge export 04

Gadgetbridgeアプリ下部の「デバイス」→「+」でスマートバンドを追加します.

確認

過去のデータを確認すると表示されます.問題なさそうです.

Gadgetbridge export 05

まとめ

めんどくさそうだなと後回しにしていたGadgetbridgeのデータ移行ですが,実際やってみると簡単でした.もっと早くやっておくんでした.
このスマートウォッチはXiaomi Mi スマートバンド5 日本語版で2年前の11月に購入したものです.2年と少し経ちましたがまだバッテリーも10日以上持ちますしヘタった感じもなく使えています.もう少し高機能なものや薄いものを見るといいなと思ったりしますがまだ使えそうなので使い続けようと思います.

]]>
https://matoken.org/blog/2024/12/21/gadgetbridge-data-migration/feed/ 0
scrcpy v3.0で仮想ディスプレイを使う https://matoken.org/blog/2024/11/25/using-virtual-display-with-scrcpy-v3-0/ https://matoken.org/blog/2024/11/25/using-virtual-display-with-scrcpy-v3-0/#respond Sun, 24 Nov 2024 21:56:51 +0000 https://matoken.org/blog/?p=4256

scrcpyの導入

例によってメインデスクトップ環境のDebian sid amd64に導入します.
Linux環境への手順は doc/linux.md に書かれています.GitHubではこちら.

ここではgit経由のsourceから導入します.

$ sudo apt install ffmpeg libsdl2-2.0-0 adb wget \
                 gcc git pkg-config meson ninja-build libsdl2-dev \
                 libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev \
                 libswresample-dev libusb-1.0-0 libusb-1.0-0-dev (1)
$ git clone https://github.com/Genymobile/scrcpy (2)
$ cd scrcpy
$ ./install_release.sh (3)
$ which scrcpy (4)
/usr/local/bin/scrcpy
$ scrcpy --version (5)
scrcpy 3.0 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
 - SDL: 2.30.9 / 2.30.9
 - libavcodec: 61.19.100 / 61.19.100
 - libavformat: 61.7.100 / 61.7.100
 - libavutil: 59.39.100 / 59.39.100
 - libavdevice: 61.3.100 / 61.3.100
 - libusb: - / 1.0.27
  1. 必要なパッケージの導入

  2. sourceのclone

  3. インストールスクリプトの実行

  4. scrcpyの場所を確認

  5. バージョンの確認

仮想ディスプレイを試す

scrcpy v3.0が入ったので早速仮想ディスプレイを試してみます. --new-display オプションに好みで解像度を指定できます.

$ scrcpy --new-display=720x1608
scrcpy 3.0 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:     -->   (usb)  ZT322L25CF                      device  moto_g24
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 147.9 MB/s (90224 bytes in 0.001s)
[server] INFO: Device: [motorola] motorola moto g24 (Android 14)
INFO: Renderer: opengl
INFO: OpenGL version: 4.6 (Compatibility Profile) Mesa 24.2.7-1
INFO: Trilinear filtering enabled
INFO: Texture: 720x1608
[server] INFO: New display: 720x1608/237 (id=3)

一部のアプリケーションが配置されています.寂しいですね.

scrcpy v3.0 vd 01

scrcpyに --start-app= オプションを指定することで好みのアプリケーションが起動できます.その前に list-apps オプションで起動したいアプリケーションを確認します.ここではニコニコ動画を起動しています.

$ scrcpy list-apps | grep nico
 - ニコニコ動画                         jp.nicovideo.android
 - ニコニコ生放送                        jp.co.dwango.nicocas
$ scrcpy --new-display=1608x720 --start-app=jp.nicovideo.android

scrcpy v3.0 vd 02

普通に視聴できました.
このときAndroid本体はディプレイは消えたままです.ロックを解除して別のアプリを使うこともできます.
仮想ディスプレイで実行中のアプリを起動するとアプリは本体側に移り,仮想ディスプレイにはデスクトップが表示されました.
仮想ディスプレイでニコニコ動画を再生しつつ本体でYouTube動画を再生してみると,両方の音声がPC側から出ました.

これまでも本体画面を消灯して使うといったことはできましたが,通知が来て別のアプリをちょっと確認したいみたいなときなどアプリを切り替える必要があり面倒でした.この仮想ディスプレイは別のディスプレイ扱いでそういうときにも2つの画面が同時に使えて便利です.
それに画面ロックを解除する必要がないのも便利です.(これは選べると嬉しいけど)

scrcpyと組み合わせて使うのにAndroidベースのTV StickやTV Boxのようなものが欲しくなります.

環境

PC環境
$ scrcpy -v
scrcpy 3.0 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
 - SDL: 2.30.9 / 2.30.9
 - libavcodec: 61.19.100 / 61.19.100
 - libavformat: 61.7.100 / 61.7.100
 - libavutil: 59.39.100 / 59.39.100
 - libavdevice: 61.3.100 / 61.3.100
 - libusb: - / 1.0.27
 $ dpkg-query -W ffmpeg libsdl2-2.0-0 adb wget \
                 gcc git pkg-config meson ninja-build libsdl2-dev \
                 libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev \
                 libswresample-dev libusb-1.0-0 libusb-1.0-0-dev
adb     1:34.0.5-3
ffmpeg  7:7.1-3
gcc     4:14.2.0-1
git     1:2.45.2-1.2
libavcodec-dev:amd64    7:7.1-3
libavdevice-dev:amd64   7:7.1-3
libavformat-dev:amd64   7:7.1-3
libavutil-dev:amd64     7:7.1-3
libsdl2-2.0-0:amd64     2.30.9+dfsg-1
libsdl2-dev:amd64       2.30.9+dfsg-1
libswresample-dev:amd64 7:7.1-3
libusb-1.0-0:amd64      2:1.0.27-1+b1
libusb-1.0-0-dev:amd64  2:1.0.27-1+b1
meson   1.6.0-1
ninja-build     1.12.1-1
pkg-config:amd64        1.8.1-4
wget    1.24.5-2+b1
$ lsb_release -dr
Description:    Debian GNU/Linux trixie/sid
Release:        n/a
$ arch
x86_64
Android環境
$ adb shell dumpsys package com.nextcloud.client | grep versionName=
    versionName=3.29.2
$ adb shell getprop ro.build.version.release
14
$ adb shell getprop ro.build.version.sdk
34
$ adb shell getprop ro.build.id
UTA34.82-90
$ adb shell getprop ro.product.model
moto g24
]]>
https://matoken.org/blog/2024/11/25/using-virtual-display-with-scrcpy-v3-0/feed/ 0
scrcpy 2.7を使いPCのゲームパッドでAndroidのゲームを遊ぶ https://matoken.org/blog/2024/09/17/play-android-games-with-pc-gamepad-using-scrcpy-2-7/ https://matoken.org/blog/2024/09/17/play-android-games-with-pc-gamepad-using-scrcpy-2-7/#respond Mon, 16 Sep 2024 21:49:42 +0000 https://matoken.org/blog/?p=4101

Android 端末の画面,音声転送や操作も出来る scrcpy の v2.7 がリリースされました.
今回ゲームパッドに対応したようなので試してみました.
PC に接続されたゲームパッドでAndroid が操作できるようになります.

過去の scrcpy の記事

Linux 架橋への導入はこちらに.

いくつかの環境ではパッケージで最新版が導入できそうですが,今回試す Debian sid amd64 環境では 1.25-1+b1 とちょっと前のバージョンなので source から build します.

依存関係のパッケージを導入
$ sudo apt install ffmpeg libsdl2-2.0-0 adb wget \
                   gcc git pkg-config meson ninja-build libsdl2-dev \
                   libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev \
                   libswresample-dev libusb-1.0-0 libusb-1.0-0-dev
source clone & build & install
$ git clone https://github.com/Genymobile/scrcpy
$ cd scrcpy
$ ./install_release.sh
確認
$ which scrcpy
/usr/local/bin/scrcpy

$ scrcpy --version
scrcpy 2.7 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
 - SDL: 2.30.7 / 2.30.7
 - libavcodec: 61.3.100 / 61.3.100
 - libavformat: 61.1.100 / 61.1.100
 - libavutil: 59.8.100 / 59.8.100
 - libavdevice: 61.1.100 / 61.1.100
 - libusb: - / 1.0.27

scrcpy 2.7 が導入できました.

Android が adb コマンドで見えるのを確認
$ adb devices
List of devices attached
ZT322L25CF      device

利用したい Android が adb コマンドで見えるのを確認して,scrcpy を -G オプションをつけて実行します.

Note

Android端末が見えない場合以下のページを参考に.
Android端末をudev roureに登録,udev rule の反映,Android 端末での USB debug の有効化を行います.

$ scrcpy -G

scrcpy 2.7 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:     -->   (usb)  ZT322L25CF                      device  moto_g24
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 135.1 MB/s (71200 bytes in 0.001s)
[server] INFO: Device: [motorola] motorola moto g24 (Android 14)
INFO: Renderer: opengl
INFO: OpenGL version: 4.6 (Compatibility Profile) Mesa 24.2.2-1
INFO: Trilinear filtering enabled
INFO: Texture: 720x1608
[server] WARN: Could not get initial audio timestamp

この状態でAndroid のゲームパッド対応ゲームを起動して,PC に接続されたゲームパッド(今回は XBox360 コントローラー)で操作できるのを確認します.

Android のゲームパッド対応ゲームは以下のページを参考に「The Ramp」というスケボーを使ってランプで遊ぶゲームを入れて試してみました.

scrcpy 2.7 game

10分ほど試しただけですが,違和感なく遊べそうです.

PC環境
$ scrcpy -v
scrcpy 2.7 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
 - SDL: 2.30.7 / 2.30.7
 - libavcodec: 61.3.100 / 61.3.100
 - libavformat: 61.1.100 / 61.1.100
 - libavutil: 59.8.100 / 59.8.100
 - libavdevice: 61.1.100 / 61.1.100
 - libusb: - / 1.0.27
$ lsb_release -dr
Description:    Debian GNU/Linux trixie/sid
Release:        n/a
$ arch
x86_64
Android環境
$ adb shell dumpsys package com.nextcloud.client | grep versionName=
    versionName=3.29.2
$ adb shell getprop ro.build.version.release
14
$ adb shell getprop ro.build.version.sdk
34
$ adb shell getprop ro.build.id
UTA34.82-73
$ adb shell getprop ro.product.model
moto g24
]]>
https://matoken.org/blog/2024/09/17/play-android-games-with-pc-gamepad-using-scrcpy-2-7/feed/ 0
Android版 Nextcloudアプリを QR code で認証 https://matoken.org/blog/2024/08/17/authenticate-android-version-nextcloud-app-with-qr-code/ https://matoken.org/blog/2024/08/17/authenticate-android-version-nextcloud-app-with-qr-code/#respond Fri, 16 Aug 2024 21:50:15 +0000 https://matoken.org/blog/?p=4089

Android 端末をセットアップしています.Nextcloid アプリで以前から QR code でも認証できそうだけどどうやって認証用の QR code を作るんだろうと思いながら手動で入力していました.

NC QR Android02

今回やり方に気づきました.

Nextcloud の認証に他要素認証を使っている環境なので,Web の Nextcloud でアプリケーションパスワードを生成します.

NC QR01

このとき下の方に「モバイルアプリのQRコードを表示する」ボタンがあるのでこれを押すと QR code が表示されます.

NC QR02

Android アプリ側で「ログイン」

NC QR Android01

下の QR code ぽい画像をタップ.QR code 読み取り用のカメラが起動するので先程のアプリパスワードの QR code を読み取ります.

NC QR Android02

お手軽ですね :)

Nextcloud環境
$ sudo -u www-data php ./occ --version
Nextcloud 29.0.4
$ lsb_release -dr
No LSB modules are available.
Description:    Debian GNU/Linux 12 (bookworm)
Release:        12
$ arch
x86_64
Android環境
$ adb shell dumpsys package com.nextcloud.client | grep versionName=
    versionName=3.29.2
$ adb shell getprop ro.build.version.release
14
$ adb shell getprop ro.build.version.sdk
34
$ adb shell getprop ro.build.id
UTA34.82-73
$ adb shell getprop ro.product.model
moto g24
]]>
https://matoken.org/blog/2024/08/17/authenticate-android-version-nextcloud-app-with-qr-code/feed/ 0
OSSのGadgetbridgeでスマートバンドのウォッチフェイスを変更 https://matoken.org/blog/2024/03/08/change-smart-band-watch-face-with-oss-gadgetbridge/ https://matoken.org/blog/2024/03/08/change-smart-band-watch-face-with-oss-gadgetbridge/#comments Fri, 08 Mar 2024 14:54:57 +0000 https://matoken.org/blog/?p=3979

先日 Gadgetbridge 経由でスマートウォッチに天気情報が表示できるようになりました.

しかし小さな画面を操作して天気情報を表示するのが面倒.すぐに確認出来るように天気対応のウォッチフェイスに変更してみました.

以下のページに Gadgetbridge でのファームウェア及びウォッチフェイスのインストール方法が書かれています.

しかし少し怖いことが書かれています.が開発者の方は遭遇したことがないそうですがスマートウォッチへの書き込みでウォッチが壊れてしまうこともあるとわかった上で操作しましょう.

# Install firmware & watchface

!!! warning “Warning”
Flashing an firmware or watchface to your gadget has the potential to brick your device! This has never happened to any of the developers through flashing, but remember you’re doing this at your own risk.

Xiaomi, Amazfit のウォッチフェイスは以下から入手できるようです.(著作権や肖像権的に駄目だろう物もいっぱいあるのでそういうものは避けたほうが良さそう.)

今回試した Xiaomi Mi Band 5 はこのあたりに.

更に日本語はこのあたり.

後は好みのフェイスをダウンロード(言語やバージョンなどの違いで複数のダウンロードの選択肢がある場合も)して, Gadgetbridge で開くとインストールされます(ファイラーなどから開いて Gadgetbridge 指定や,Gadgetbridge の対象デバイスのハンバーガーメニューから File Installer から導入).ここではPC でダウンロードしましたが Android でダウンロードしたほうが楽だったかもしれないですね.

watchface download
watchface download2

watchface installing1
watchface installing2
watchface installing3

watchface installing4

watchface test

Xiaomi Mi Band 5 は規定値のフェイスが3種類,カスタムフェイスが3つインストールできます.4つ目を導入すると1つ消えてしまいます.フェイスの切り替えはウォッチの「その他」→「バンドディスプレイ」から切り替えたいフェイスを選べます.同じバンドディスプレイでカスタムフェイスの削除もできます.

機能的なものだけでなくこういうあひるなんかも可愛い?ですね.(アニメーションします.)

watchface duck

あまり気にしていなかったウォッチフェイスですが変更してみると結構新鮮な気持ちになって良かったです.

環境
watch
Xiaomi Mi Band 5
Gadgetprigde
0.79.1
Android
12
model
motorola moto g31
$ adb shell dumpsys package nodomain.freeyourgadget.gadgetbridge | grep -E 'versionCode|versionName'
    versionCode=230 minSdk=21 targetSdk=33
    versionName=0.79.1
$ adb shell getprop ro.product.model
moto g31(w)
$ adb shell getprop ro.bootimage.build.fingerprint
motorola/cofud_g/cofud:12/S3RWDS32.123-29-8-2-3/1551dd:user/release-keys
$ adb shell getprop ro.build.version.security_patch
2023-12-01
$ adb shell getprop ro.product.cpu.abilist
arm64-v8a,armeabi-v7a,armeabi
]]>
https://matoken.org/blog/2024/03/08/change-smart-band-watch-face-with-oss-gadgetbridge/feed/ 1
Signal のベータバージョンで電話番号を共有せずにメッセージのやり取りが出来るように https://matoken.org/blog/2024/02/22/no-share-phoneno-signal-beta/ https://matoken.org/blog/2024/02/22/no-share-phoneno-signal-beta/#respond Thu, 22 Feb 2024 08:57:01 +0000 https://matoken.org/blog/?p=3976

セキュアなメッセージングアプリのSignal のベータ版でユーザーネームに対応して電話番号をやり取りしなくてもメッセージのやり取りが出来るようになりました.

これまでは電話番号が相手に知られるので使いづらかったのですが,Telegram のようにユーザーネームだけでメッセージのやり取りが出来るようになり気軽に使いやすくなりました.

現時点ではベータ版のみの対応ですが,今後数週間で全ユーザがこの昨日を利用できるようになるそうです.

てことで,Android 版と,PC(Linux)版を試してみました.

以下のページにベータ版の利用方法が書かれています.

Android版

まずはAndroid から.以下のリンクからベータチャンネルを有効にして,SIgnal アプリをベータ版に更新します.

signalB update

「設定」→「プロフィール」の「@ユーザーネーム」で任意のユーザーネームを設定できます.

signal username

ユーザーネームの後ろに自動的に2桁のpin番号が付与されます.この番号も任意の番号に変更可能でした.

signal setusername
signal username pin

これでこの「ユーザーネーム.pin」で他のユーザーからメッセージを送る準備ができました.
メッセージをやり取りする時の表示名はプロフィールのものでした.

「設定」→「プライバシー」→「電話番号」で電話番号この公開や検索の設定ができます.既定値では電話番号は非公開,電話番号での検索は可能となっていました.

signal phoneno

Android環境
Signal 7.0.0
Android 12
motrola moto g31(w)

PC版(Linux)

Linux PC版はamd64 のDebina ベースディストリビューション向けにAPT リポジトリが用意されています.
すでにstable 向けに設定済なので,ベータ版パッケージを導入するだけでOK でした.

$ sudo apt update
$ sudo apt install signal-desktop-beta
$ apt show signal-desktop-beta
Package: signal-desktop-beta
Version: 7.0.0-beta.1
Priority: optional
Section: default
Maintainer: Signal Messenger, LLC <support@signal.org>
Installed-Size: 450 MB
Depends: libnotify4, libxtst6, libnss3, libasound2, libxss1, libc6 (>= 2.31), libgtk-3-0, libgbm1, libx11-xcb1
Recommends: libappindicator3-1
Homepage: https://github.com/signalapp/Signal-Desktop#readme
Vendor: Signal Messenger, LLC <support@signal.org>
License: AGPL-3.0-only
Download-Size: 118 MB
APT-Manual-Installed: yes
APT-Sources: https://updates.signal.org/desktop/apt xenial/main amd64 Packages
Description: Private messaging from your desktop

N: There are 170 additional records. Please use the '-a' switch to see them.

signal desktop beta version

よくあるElectron製だと思うのですが,ダウンロードに120MB 近く,展開すると500MB 近く.メモリも結構食うのでメモリやストレージが少ない端末で常駐させるのは辛いですね.

PC環境
$ dpkg-query -W signal-desktop*
signal-desktop  6.48.0
signal-desktop-beta     7.0.0-beta.1
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux trixie/sid
Release:        n/a
Codename:       trixie
$ arch
x86_64
]]>
https://matoken.org/blog/2024/02/22/no-share-phoneno-signal-beta/feed/ 0
OSSのGadgetbridgeで天気情報をスマートウォッチで利用 https://matoken.org/blog/2024/02/03/use-weather-information-on-your-smartwatch-with-oss-gadgetbridge/ https://matoken.org/blog/2024/02/03/use-weather-information-on-your-smartwatch-with-oss-gadgetbridge/#comments Fri, 02 Feb 2024 21:22:08 +0000 https://matoken.org/blog/?p=3957

gadgetbridge logo

Gadgetbridge というオープンソースのAndroid アプリケーションを利用してスマートウォッチの(データが送信されていそうな)ベンダー公式アプリケーションを使わずに2,480円で購入したMi Band 5 を利用しています.

これは2023-09-17(sun)に鹿児島Linux勉強会 2023.09 で発表しました.

安めのスマートウォッチをOSSでセキュアに使う(Gadgetbridge)
Note
SpeakerDeck はリンクなどが開けないのでsource(preview) のほうがおすすめです.

スマホでわかるし設定面倒差しと思い天気の設定をしていなかったのですが,最近スマートウォッチで天気を確認したい機会があったので設定してみました.

Gadgetbridge とスマートウォッチの連携ができている状態とします.まだ出いていない人は上のスライドを参照してください.

まず,天気プロバイダーになるアプリケーションを欄で導入します.
以下のページで5種類のアプリなどが紹介されています.

今回はQuickWeather を利用しました.

F-Droid からAndroid に導入しました.
起動すると設定画面になるので,「Weather Provider」をOpenWeatherMap かOpen-Meteo のどちらかを選びます.OpenWeatherMap はAPI Key(無料もあり)が必須で,Open-Meteo はAPI Key はoption でした.
両方試しましたがどちらでもスマートウォッチに転送できたので好みの方を選びましょう.

weatherprovider

次に「Locations」で場所を選びます.今居る場所はTHIS LOCATION でGPS から取得できます.その他の場所はOTHER LOCATION から地名や地図から選べます.

weatherlocations

次の設定画面の「Extentions」で「Gadgetbridge」を「ENABLED」にします.

これでWeather Provider → QuickWeather → Gadgetbridge → スマートウォッチと天気が転送されて表示されるようになりました.

watch weather01
watch weather02

Location を複数設定した場合は,QuickWeather アプリの右上のハンバーガーメニューから「Locations」が選択できるのでそこで選択したLocation の天気が時計に転送されるようです.

weatherlocation select

環境
スマートウォッチ

Mi smart band 5(XMSH10HM)

Android

moto g31 (Android 12)

Gadgetbridge

0.78.0

QuickWeather

2.6.2

]]>
https://matoken.org/blog/2024/02/03/use-weather-information-on-your-smartwatch-with-oss-gadgetbridge/feed/ 2
TwitterクライアントのFritterの復活とFeedの削除と,Feedの使えるforkのQuacker https://matoken.org/blog/2023/05/24/twitter-client-friter-and_quacker/ https://matoken.org/blog/2023/05/24/twitter-client-friter-and_quacker/#respond Tue, 23 May 2023 20:45:00 +0000 https://matoken.org/blog/?p=3901

Fritterというログイン不要でTwitterの購読ができるAndroid用のTwitter clientがあります.

既存Twitterアカウントからフォローをインポートしたり,購読グループを複数作成したりと便利なのですが,安定版は近ごろのTwitterの仕様変更などにより利用できなくなっていました.
Nitterは対応していたのでそのうち対応されるかもと思っていたら以下のような通知が.

An update for Fritter is available!🚀

An update for Fritter is available!🚀
Update to v3.0.0-beta9 through your FDroid client

アップデートが出たようです.早速F-Droidを起動して更新します…….リポジトリを更新しても更新に出てきません.
F-DroidのFritterのページの下のバージョンをタップして,v3.0.0-beta9を選んで導入しました.

f droid

導入後起動すると,各ユーザのタイムラインが閲覧できるようになりました :)

しかし,以前あったfeedタブが見当たりません.設定にも特に無さそう.
issueを確認したところ以下のようなものが.feed機能は削除されたようです.

TLDR; I’m not going to be reinstating the feed, as it’s too hard to maintain and bad for people’s mental health.

まあわかるけど一人ひとり確認するのは不便です.

Fritterをforkしてfeed機能を復活させた方がいました.Quackerというようです.🦆

Quacker

アヒルのアイコンが可愛いですね.

QuackerはF-Droid規定値のリポジトリの中にはないようです.以下から手動でダウンロードするか,

F-Droidにリポジトリを追加( https://apt.izzysoft.de/fdroid/repo )して,リポジトリを更新してQuackerを検索して導入します.

F Droid Quacker repo
F Droid Quacker install

あとはFritterから設定をエクスポートして,Quackerで設定をインポートすることで以前のFritterのように使えるようになりました.

まあ,Twitterによりまたすぐに動かなくなるかもしれませんが…….

]]>
https://matoken.org/blog/2023/05/24/twitter-client-friter-and_quacker/feed/ 0
Andorid の画面をPC に転送して操作も出来るScrcpy 2.0 でオーディオ転送にも対応 https://matoken.org/blog/2023/03/13/scrcpy-2-0-audio/ https://matoken.org/blog/2023/03/13/scrcpy-2-0-audio/#respond Sun, 12 Mar 2023 21:45:00 +0000 https://matoken.org/blog/?p=3881

Andorid の画面をPC に転送して操作も出来るScrcpy というソフトウェアがあります.最新版の2.0でオーディオ転送にも正式対応したので試してみました.

Scrcpy はここでも何度か記事にしています.

このScrcpy はオーディオに対応しておらず,sndcpy という別のソフトウェアを使ったり,Scrcpy/sndcpyを同梱してQtでGUIを実装したQtScrcpy を使ったり,Bluetooth a2d-source を使って音を転送していました.

Scrcpy 2.0 がリリースされ,標準でオーディオに対応したとのことで試してみました.

Linux 環境への導入は以下のページに纏まっています.ただ,現バージョンで2.0に対応しているのはHomebrewとScoopだけのようです.

snap も未だ 1.25 です.

ということでsourceからbuildしました.

$ sudo apt install ffmpeg libsdl2-2.0-0 adb wget \
                 gcc git pkg-config meson ninja-build libsdl2-dev \
                 libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev \
                 libswresample-dev libusb-1.0-0 libusb-1.0-0-dev (1)
$ git clone https://github.com/Genymobile/scrcpy (2)
$ cd scrcpy
$ ./install_release.sh (3)
$ which scrcpy (4)
/usr/local/bin/scrcpy
$ scrcpy --version (5)
scrcpy 2.0 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
 - SDL: 2.26.3 / 2.26.3
 - libavcodec: 59.37.100 / 59.37.100
 - libavformat: 59.27.100 / 59.27.100
 - libavutil: 57.28.100 / 57.28.100
 - libavdevice: 59.7.100 / 59.7.100
 - libusb: - / 1.0.26
  1. 関連パッケージの導入
  2. scrcpy のclone
  3. build&install script の実行
  4. インストールパスの確認
  5. バージョンの確認
Note

uninstall

$ sudo ninja -Cbuild-auto uninstall

Android 端末のudev への登録をしていない場合登録します.Android端末側ではUSBデバッグを有効にしておいて,フィンガープリントの確認が表示されたら許可します.

$ lsusb | grep -i moto (1)
Bus 001 Device 011: ID 22b8:2e82 Motorola PCS XT1541 [Moto G 3rd Gen]
$ echo '# moto g31
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8" ATTR{idProduct}=="2e82", MODE="0660", GROUP="plugdev", SYMLINK+="android%n"' | sudo tee -a /etc/udev/rules.d/51-android.rules (2)
$ sudo udevadm control --reload (3)
$ adb devices (4)
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached
ZY22DZ5M6C      device (5)
  1. AndroidデバイスのVID/PIDを確認
  2. udevへ登録
  3. udevをリロードして反映
  4. adbコマンドでデバイスが認識されるか確認

この状態でScrcpyを実行します.オーディオについては既定値で有効になっています.

$ scrcpy
scrcpy 2.0 <https://github.com/Genymobile/scrcpy>
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 5.2 MB/s (52867 bytes in 0.010s)
[server] INFO: Device: motorola moto g31(w) (Android 12)
INFO: Renderer: opengl
INFO: OpenGL version: 4.6 (Compatibility Profile) Mesa 22.3.3
INFO: Trilinear filtering enabled
INFO: Initial texture: 1080x2400

この状態でAndroid側で音の出るアプリケーションを試すとPCから音が出てAndroid側からは音が出ずいい感じです.Bluetooth 接続と違い遅延も感じません.

scrcpy2.0 duolingo

Pavucontrol を確認しても scrcpy が居ます.

scrcpy2.0 pulseaudio

Scrcpy オーディオ非対応のAndroid 9(10 以前)端末でも試してみたところ以下のような警告が表示され,音は転送されませんでした.

[server] INFO: Device: TINNO C330 (Android 9)
[server] WARN: Audio disabled: it is not supported before Android 11

オーディオ転送を行いたくない場合は --no-audio オプションが利用できます.
以下オーディオ関連のオプションです.音がきれいに聞こえない場合は --audio-buffer=ms を設定する(既定値50から増やす)と良さそうです

 scrcpy --help | grep -- -audio
    --audio-bit-rate=value
    --audio-buffer=ms
    --audio-codec=name
    --audio-codec-options=key[:type]=value[,...]
    --audio-encoder=name
        by --audio-codec).
    --no-audio
    --require-audio
環境
$ scrcpy --version
scrcpy 2.0 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
 - SDL: 2.26.3 / 2.26.3
 - libavcodec: 59.37.100 / 59.37.100
 - libavformat: 59.27.100 / 59.27.100
 - libavutil: 57.28.100 / 57.28.100
 - libavdevice: 59.7.100 / 59.7.100
 - libusb: - / 1.0.26
 $ dpkg-query -W ffmpeg libsdl2-2.0-0 adb wget gcc git pkg-config meson ninja-build libsdl2-dev libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev libswresample-dev libusb-1.0-0 libusb-1.0-0-dev adb
adb     1:29.0.6-26
ffmpeg  7:5.1.2-3
gcc     4:12.2.0-3
git     1:2.39.2-1.1
libavcodec-dev:amd64    7:5.1.2-3
libavdevice-dev:amd64   7:5.1.2-3
libavformat-dev:amd64   7:5.1.2-3
libavutil-dev:amd64     7:5.1.2-3
libsdl2-2.0-0:amd64     2.26.3+dfsg-1
libsdl2-2.0-0:i386      2.26.3+dfsg-1
libsdl2-dev:amd64       2.26.3+dfsg-1
libswresample-dev:amd64 7:5.1.2-3
libusb-1.0-0:amd64      2:1.0.26-1
libusb-1.0-0:i386       2:1.0.26-1
libusb-1.0-0-dev:amd64  2:1.0.26-1
meson   1.0.0-1.1
ninja-build     1.11.1-1
pkg-config:amd64        1.8.1-1
wget    1.21.3-1+b2
$ lsb_release -a
Distributor ID: Debian
Description:    Debian GNU/Linux bookworm/sid
Release:        n/a
Codename:       bookworm
$ arch
x86_64
]]>
https://matoken.org/blog/2023/03/13/scrcpy-2-0-audio/feed/ 0
Android 12端末でUSBテザリングを手軽に有効にしたい https://matoken.org/blog/2023/03/06/i-want-to-easily-enable-usb-tethering-on-my-android-12-device/ https://matoken.org/blog/2023/03/06/i-want-to-easily-enable-usb-tethering-on-my-android-12-device/#respond Sun, 05 Mar 2023 15:42:41 +0000 https://matoken.org/blog/?p=3875

Android 12端末でUSBテザリングをOnにするのが面倒なので手軽な方法がないか探してみました.

手元のAndroid 端末の moto g31 という端末を1年ほど使っています.最近自宅の固定回線がなくなったので無料Wi-Fiを利用してUSBテザリングをよく利用するようになりました.Android 11 では上部から下にスワイプして出てくるクイック設定パネルの「アクセスポイント」を長押ししてテザリング画面に遷移してUSBテザリングをOnにしていました.

Note
PC側でWi-Fiに直接繋げばいいのですが,場所ごとに接続方法が違って面倒,Androidだと自動接続アプリでその当たりの面倒を見てくれるのでUSBテザリングを使っています.Wi-Fi → Wi-Fiテザリングが出来るといいのですがこの端末は非対応です.(Essetial Phone では出来ていた)

先日Android 12 がOTA で降ってきてアップグレードしたところ.同じ操作ではWi-Fiアクセスポイントの設定画面に遷移するようになりUSBテザリング画面に行くのが面倒になりました.
昔ウィジットでテザリングの切り替えが出来るアプリケーションを使っていたなといくつか見てみるとメンテされておらず最近のバージョンでは動かなそう.ウィジットで設定へのショートカットを作れればいいのですが,Wi-Fiアクセスポイントへのショートカットを作ることは出来ましたがUSBテザリングのページへのショートカットは見当たりません.
更に探すとHotspot and tethering shortcut というアプリケーションを見つけました.

8 FY1f4M4gcy5lJmmAHxwmGA3VaCd kPx8XKv1kPozw8EFOszMWgUgqglaXjeYiMciw=w240 h480 rw

このアプリケーションを起動すると,「設定」→「ネットワークとインターネット」→「アクセスポイントとテザリング」と辿らなくても「アクセスポイントとテザリング」に飛びます.
とりあえずこれを使ってみようと思います.

Android12 USB tethering

Note
常にUSBテザリングを既定値にすることも出来ますが,不便なこともあるので手動設定にしています.(「開発者オプション」→「デフォルトのUSB設定」→「✅USBテザリング」)
]]>
https://matoken.org/blog/2023/03/06/i-want-to-easily-enable-usb-tethering-on-my-android-12-device/feed/ 0
TwidereをTwidere XのAPI Keyに変更して投稿できるようにする 2023-01-16 https://matoken.org/blog/2023/01/16/change-twidere-to-twidere-x-api-key/ https://matoken.org/blog/2023/01/16/change-twidere-to-twidere-x-api-key/#respond Mon, 16 Jan 2023 14:49:27 +0000 https://matoken.org/blog/?p=3812

最近のTwitterの使い方はこんな感じ

このTwidereでのTwitter投稿が失敗するようになりました.
Twitterは最近色々と変わったりしているしそのうち治るかなと思ったけど治りません.

他のクライアントはどうだろうとoysttyerを試すとpost出来ました.

認証し直したら行けるのかな?とTwidereでログインし直そうとすると認証できません.
クライアントの認証方式の違いのせいなのかな?とTwidereのissueを見るとTwidere XのTwitter API keyに変更すると動くようになるというものが有りました.

What worked for me is:

Go to Settings > Network > Avanced > Default API Settings
Replace the consumer key and consumer secret with those above and save
Go to Accounts and click the + in the top right
Choose Twitter > User Settings
Click Register, then the Sign In button, this should take you to an authorization page
Go through the authorization steps
Refresh your timelines

これを試すと投稿できるようになりました.ということはTwitterは特定のクライアントを拒否するようにしているみたいですね…….
まあ明日には変わっているかもしれませんが.

以下日本語環境でのメモ.

twidere api01
twidere api02
twidere api03
twidere api04
twidere api05
twidere api06
twidere api07
twidere api08
twidere api09
twidere api10
twidere api11

]]>
https://matoken.org/blog/2023/01/16/change-twidere-to-twidere-x-api-key/feed/ 0
Galene 0.6 と Android版クライアント https://matoken.org/blog/2022/09/12/galene-0-6-and-android-client/ https://matoken.org/blog/2022/09/12/galene-0-6-and-android-client/#respond Mon, 12 Sep 2022 14:51:48 +0000 http://matoken.org/blog/?p=3772

OSSのビデオミーティングソフトウェアの Galene 0.6 がリリースされたのでアップグレードしました.

$ cd <GALENEPATH> (1)
$ git pull (2)
$ git checkout galene-0.6 (3)
$ CGO_ENABLED=0 go build -ldflags='-s -w' (4)
$ rsync -acvP galene static data <REMOTESERVER>:~/ (5)
  1. Galeneのsourceディレクトリに移動
  2. リポジトリを最新に
  3. Galene 0.6 にチェックアウト
  4. ビルド
  5. リモートサーバにコピー

後はリモートサーバでGalene再起動でok

今回のバージョンでいくつかの修正が入り,Android版クライアントが動作するようになりました.

ただし,Android版クライアントはまだPoC版という感じで導入には自分で,apkを入手してインストールする必要があるし,起動してもホスト名やユーザ名を覚えてくれないし画面共有の機能しかありません.
画面共有の機能しか無いので,話をするには別のウェブブラウザでGaleneに参加して通話しつつAndroidクライアントで画面共有になりそうです.

それでもAndroidで画面共有できるのは助かります.

Galene Android

ビルド環境
$ PAGER=cat git log -1
commit c67a9307dae3bfce9c910c8cd35f3c916c70aaed (HEAD, tag: galene-0.6, origin/master, origin/HEAD)
Author: Juliusz Chroboczek <jch@irif.fr>
Date:   Sat Sep 10 14:27:58 2022 +0200

    Update CHANGES for 0.6.
$ dpkg-query -W golang
$ lsb_release -dr
Description:    Debian GNU/Linux bookworm/sid
Release:        unstable
$ arch
x86_64
ホスト環境
$ lsb_release -dr
Description:    Debian GNU/Linux 10 (buster)
Release:        10
$ arch
x86_64
]]>
https://matoken.org/blog/2022/09/12/galene-0-6-and-android-client/feed/ 0
実はQZSSに対応していたAndroidスマートフォン(Rakuten mini, Moto g31) https://matoken.org/blog/2022/04/03/in-fact-an-android-smartphone-that-was-compatible-with-qzss-rakuten-mini-moto-g31/ https://matoken.org/blog/2022/04/03/in-fact-an-android-smartphone-that-was-compatible-with-qzss-rakuten-mini-moto-g31/#respond Sun, 03 Apr 2022 14:49:04 +0000 http://matoken.org/blog/?p=3572

CAMALIOTを試しているときに気づいたのですが,QZSSの項目があります.スペック表には載っていなかったと思うのですが拾えているようです?

CAMALIOT02

GPStestというアプリで確認してみると拾っているようです.

以下の画像ではGPS補助として🇯🇵の194/195とSBASで137を拾っているようです.

GPSTest01

今回試した端末はMOTOROLA moto g31とRakuten Mini.どちらもQZSS対応とは書かれていません.moto g31はGPS, GLONASS, Galileo は明示的に書かれていて,Rakuten Mini は詳細は書かれていません.

moto g31
位置情報サービス
GPS、A-GPS、LTEPP、SUPL、GLONASS、Galileo
Rakuten Mini
GPS
対応

実際に拾えているのはこんな感じのようです.

moto g31
GPS, Galileo, Glonass, QZSS
Rakuten Mini
GPS, Galileo, Glonass, Beidou, QZSS
EssentialPhone(おまけ)
GPS, Galileo, Glonass, Beidou

以下のリストに載っている製品も少ないしカタログにも載っていないのでQZSS対応製品は少ないと思っていたのですが,実は対応している製品はそれなりにあるのかもしれません.

]]>
https://matoken.org/blog/2022/04/03/in-fact-an-android-smartphone-that-was-compatible-with-qzss-rakuten-mini-moto-g31/feed/ 0
AndroidのGNSS衛星情報を提供して天気予報の精度向上に協力するCAMALIOT https://matoken.org/blog/2022/04/03/camaliot-that-provides-android-gnss-satellite-information-to-help-improve-the-accuracy-of-weather-forecasts/ https://matoken.org/blog/2022/04/03/camaliot-that-provides-android-gnss-satellite-information-to-help-improve-the-accuracy-of-weather-forecasts/#respond Sun, 03 Apr 2022 14:14:42 +0000 http://matoken.org/blog/?p=3569

Android端末でGNSSデータを受信してそれをアップロードすることでそのデータを元に天気予報の制度を良くしようといったプロジェクトを見かけました.ESAの資金提供でのプロジェクトなので日本では動かないかなと思いながら試すと動作するようです.

CAMALIOT01

GooglePlay StoreよりCAMALIOTアプリケーションを導入して起動します.「START LOGGING」ボタンを押してGNSSデータ収集開始.なるべく空からの電波が拾える場所に置いておきます.データのロギング中はオフラインでも大丈夫です.「STOP LOGGING」でデータ収集終了します.このときデータをアップロードするか効かれるので「NOW」ボタンを押すとデータアップロードが始まります.アカウントを作っていない場合はアカウントの作成が必要です,「LATER」を選択した場合は株の真ん中の☁↑ボタンからもアップロードできます.都合のいいときにアップロードしましょう.
アップロードすると📊ボタンからリーダーボードで自分の順位が確認できます.

現在06/30までキャンペーン中でAndroidフォンやAmazonバウチャーが当たるかもしれないようです.

CAMALIOT02

ということで欧州のプロジェクトですが日本からでもロギングして送信,リーダーボードに掲載されるを確認できました.
しかし日本のデータが役に立つのかはわかりません.

類似のプロジェクトは複数あるようで日本でもこんなものなどが.こういったものでCAMALIOTのようにデータ提供できるようなら協力してみたいです.

]]>
https://matoken.org/blog/2022/04/03/camaliot-that-provides-android-gnss-satellite-information-to-help-improve-the-accuracy-of-weather-forecasts/feed/ 0
sndcpyでAndroidのサウンドをUSB経由でPCに転送 https://matoken.org/blog/2022/03/30/transfer-android-sounds-to-pc-via-usb-with-sndcpy/ https://matoken.org/blog/2022/03/30/transfer-android-sounds-to-pc-via-usb-with-sndcpy/#comments Wed, 30 Mar 2022 10:26:44 +0000 http://matoken.org/blog/?p=3564

AndroidのオーディオをPCに転送して視聴ということをよくやるのですが,昔は3.5mmオーディオミニジャックで最近はBluetooth A2DP sourceで転送しています.
今回USBで転送できる sndcpy を試してみました.

Tip

sndcpy はAndroid 10以降が必要です.別途クライアントPCにVLCも必要です.導入していない場合は導入しておきましょう.

$ sudo apt install vlc

sndcpyのReleasesから最新を入手します.現在は v1.1 が最新でLinux版(sndcpy-v1.1.zip)とWindows版(sndcpy-with-adb-windows-v1.1.zip)があります.
今回Linuxなので sndcpy-v1.1.zipとチェックサムとその署名ファイルをダウンロードして確認します.

$ wget https://github.com/rom1v/sndcpy/releases/download/v1.1/sndcpy-v1.1.zip \
https://github.com/rom1v/sndcpy/releases/download/v1.1/SHA256SUMS.txt \
https://github.com/rom1v/sndcpy/releases/download/v1.1/SHA256SUMS.txt.asc
$ sha256sum -c ./SHA256SUMS.txt
sndcpy-v1.1.zip: 完了
$ gpg --verify ./SHA256SUMS.txt.asc

適当なディレクトリに展開します.

$ unzip -l ./sndcpy-v1.1.zip
Archive:  ./sndcpy-v1.1.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
    95591  2021-11-30 07:13   sndcpy.apk
      799  2021-11-30 07:13   sndcpy
     1028  2021-11-30 07:13   sndcpy.bat
---------                     -------
    97418                     3 files
$ mkdir ./sndcpy
$ cd sndcpy
$ unzip ../sndcpy-v1.1.zip

準備が出来たのでAndroid端末をUSB接続した状態で実行します.

$ ./sndcpy
Waiting for device...
* daemon not running; starting now at tcp:5037
* daemon started successfully
Performing Streamed Install
Success
28200
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.rom1v.sndcpy/.MainActivity }
Playing audio...
VLC media player 3.0.16 Vetinari (revision 3.0.13-8-g41878ff4f2)
[00005616cdcf65e0] dummy interface: using the dummy interface module...
[00007f5a800015c0] main stream error: connection error: Connection refused
[00007f5a94000c80] main input error: ES_OUT_SET_(GROUP_)PCR  is called too late (pts_delay increased to 0 ms)
[00007f5a94000c80] main input error: ES_OUT_SET_(GROUP_)PCR  is called too late (pts_delay increased to 1 ms)

この状態でAndroid側で音を再生してみるとPC側から聞こえます.このときAndroid側はミュートでもOKで,音量を上げるとAndroid/PC両方から音が出ました.

ということで簡単に動作したのですが問題が.かなり音が悪いです.音質はいいけど細かく途切れる感じです.以下のIssueが近いかな?

ということで一旦使うのをやめることにします.sndcpyはAndroidにsndcpy.apkをインストールするのでこれを削除します.

$ adb uninstall com.rom1v.sndcpy
Success

これで元に戻ったはずです.

sndcpy は現段階では環境を選ぶ(Android 10以降)し音もいまいちなのでこれからに期待です.とりあえずはこれまで通りBluetooth A2DPで繋ごうと思います.(これはこれで2台同時に接続できないという問題があります)

sndcpy a2dp source

環境
$ dpkg-query -W adb
adb     1:10.0.0+r36-7
$ lsb_release -dr
Description:    Debian GNU/Linux 11 (bullseye)
Release:        11
$ arch
x86_64
]]>
https://matoken.org/blog/2022/03/30/transfer-android-sounds-to-pc-via-usb-with-sndcpy/feed/ 1
snap版scrcpyでAndroidデバイス画面をビデオデバイスに出力 https://matoken.org/blog/2022/03/29/output-android-device-screen-to-video-device-with-snap-version-scrcpy/ https://matoken.org/blog/2022/03/29/output-android-device-screen-to-video-device-with-snap-version-scrcpy/#comments Tue, 29 Mar 2022 11:20:37 +0000 http://matoken.org/blog/?p=3559

Androidアプリの画面をsnap版のscrcpyでビデオデバイスに流し込もうとしたら少しハマったのでメモしておきます.

Debian Bullseye amd64のscrcpyでAndroidの画面をビデオデバイスに出力してみようと --v4l2-sink オプションを指定したところバージョンが古く未対応でした.

$ /bin/scrcpy --v4l2-sink /dev/video8
/bin/scrcpy: unrecognized option '--v4l2-sink'

Debian sidの 1.23-1 だと存在するオプションなのですがそれを入れると依存関係がおかしくなりそうなので避けたいところ.

Androidアプリの画面をsnap版のscrcpyでビデオデバイスに流し込もうとしたら少しハマったのでメモしておきます.


Debian Bullseye amd64のscrcpyでAndroidの画面をビデオデバイスに出力してみようと --v4l2-sink オプションを指定したところバージョンが古く未対応でした.

$ /bin/scrcpy --v4l2-sink /dev/video8
/bin/scrcpy: unrecognized option '--v4l2-sink'

Debian sidの 1.23-1 だと存在するオプションなのですがそれを入れると依存関係がおかしくなりそうなので避けたいところ.

$ rmadison scrcpy
scrcpy     | 1.17-1        | stable         | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x
scrcpy     | 1.23-1        | unstable       | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x
scrcpy     | 1.23-1        | unstable-debug | source

snapを確認すると1.23のようなのでこれを導入してみました.

$ snap find scrcpy
Name       Version  Publisher   Notes  Summary
scrcpy     v1.23    sisco311    -      Display and control your Android device
guiscrcpy  v4.9.0   srevinsaju  -      An opensource graphical user interface for Android screen mirroring
$ snao install scrcpy
$ snap info scrcpy
name:      scrcpy
summary:   Display and control your Android device
publisher: sisco311
store-url: https://snapcraft.io/scrcpy
contact:   https://github.com/sisco311/scrcpy-snap/issues
license:   Apache-2.0
description: |
  This application provides display and control of Android devices connected on USB (or over
  TCP/IP). It does not require any root access.

  This is an unofficial snap. The code of scrcpy can be found at:
  https://github.com/Genymobile/scrcpy
commands:
  - scrcpy.adb
  - scrcpy
snap-id:      M7yvgnqOvyQj64bolfpawIAEwHv7dQ5G
tracking:     latest/stable
refresh-date: today at 01:27 JST
channels:
  latest/stable:    v1.23             2022-03-03 (379)  87MB -
  latest/candidate: ↑
  latest/beta:      v1.23-2-gadbe7908 2022-03-02 (376)  87MB -
  latest/edge:      v1.21-2-g5704ec6  2021-12-07 (358) 101MB -
installed:          v1.23                        (379)  87MB -

1.23です.

$ which scrcpy
/snap/bin/scrcpy
$ scrcpy --version
scrcpy 1.23 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
 - SDL: 2.0.8 / 2.0.8
 - libavcodec: 57.107.100 / 57.107.100
 - libavformat: 57.83.100 / 57.83.100
 - libavutil: 55.78.100 / 55.78.100
 - libavdevice: 57.10.100 / 57.10.100
 - libusb: - / 1.0.21

早速使おうと思いましたがエラーとなってしまいました.

$ scrcpy --v4l2-sink /dev/video8
scrcpy 1.23 <https://github.com/Genymobile/scrcpy>
INFO: Video orientation is locked for v4l2 sink. See --lock-video-orientation.
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed. 6.8 MB/s (41123 bytes in 0.006s)
[server] INFO: Device: motorola moto g31(w) (Android 11)
INFO: Renderer: opengl
INFO: OpenGL version: 3.0 Mesa 20.0.8
INFO: Trilinear filtering enabled
INFO: Initial texture: 1080x2400
ERROR: Failed to open output device: /dev/video8
ERROR: Could not open frame sink 1
ERROR: Could not open decoder sinks
ERROR: Could not open packet sink 0
ERROR: Could not open demuxer sinks
WARN: Device disconnected
WARN: Killing the server...

このデバイスは存在するし,別のアプリケーションから動画を流し込むと動作します.

issueを検索すると以下のコメントを見つけました.

以下のコマンドでsnapのscrcpyにビデオデバイスを接続する必要があるようです.

$ snap connect scrcpy:camera

認識させたあと実行するとうまく行きました.

$ scrcpy --v4l2-sink /dev/video8 --lock-video-orientation --max-size=720 -N
scrcpy 1.23 <https://github.com/Genymobile/scrcpy>
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed. 10.6 MB/s (41123 bytes in 0.004s)
[server] INFO: Device: motorola moto g31(w) (Android 11)
INFO: v4l2 sink started to device: /dev/video8

scrcpy snap2video

環境
$ snap info scrcpy | grep installed:
installed:          v1.23                        (379)  87MB -
$ dpkg-query -W snap v4l2loopback-dkms v4l2loopback-source v4l2loopback-utils
snap
v4l2loopback-dkms       0.12.5-1
v4l2loopback-source     0.12.5-1
v4l2loopback-utils      0.12.5-1
$ lsb_release -dr
Description:    Debian GNU/Linux 11 (bullseye)
Release:        11
$ uname -a
Linux yoga-260 5.16.15-le9 #10 SMP PREEMPT Sat Mar 19 01:52:06 JST 2022 x86_64 GNU/Linux
$ arch
x86_64
$ rmadison scrcpy
scrcpy     | 1.17-1        | stable         | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x
scrcpy     | 1.23-1        | unstable       | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x
scrcpy     | 1.23-1        | unstable-debug | source

snapを確認すると1.23のようなのでこれを導入してみました.

$ snap find scrcpy
Name       Version  Publisher   Notes  Summary
scrcpy     v1.23    sisco311    -      Display and control your Android device
guiscrcpy  v4.9.0   srevinsaju  -      An opensource graphical user interface for Android screen mirroring
$ snao install scrcpy
$ snap info scrcpy
name:      scrcpy
summary:   Display and control your Android device
publisher: sisco311
store-url: https://snapcraft.io/scrcpy
contact:   https://github.com/sisco311/scrcpy-snap/issues
license:   Apache-2.0
description: |
  This application provides display and control of Android devices connected on USB (or over
  TCP/IP). It does not require any root access.

  This is an unofficial snap. The code of scrcpy can be found at:
  https://github.com/Genymobile/scrcpy
commands:
  - scrcpy.adb
  - scrcpy
snap-id:      M7yvgnqOvyQj64bolfpawIAEwHv7dQ5G
tracking:     latest/stable
refresh-date: today at 01:27 JST
channels:
  latest/stable:    v1.23             2022-03-03 (379)  87MB -
  latest/candidate: ↑
  latest/beta:      v1.23-2-gadbe7908 2022-03-02 (376)  87MB -
  latest/edge:      v1.21-2-g5704ec6  2021-12-07 (358) 101MB -
installed:          v1.23                        (379)  87MB -

1.23です.

$ which scrcpy
/snap/bin/scrcpy
$ scrcpy --version
scrcpy 1.23 <https://github.com/Genymobile/scrcpy>

Dependencies (compiled / linked):
 - SDL: 2.0.8 / 2.0.8
 - libavcodec: 57.107.100 / 57.107.100
 - libavformat: 57.83.100 / 57.83.100
 - libavutil: 55.78.100 / 55.78.100
 - libavdevice: 57.10.100 / 57.10.100
 - libusb: - / 1.0.21

早速使おうと思いましたがエラーとなってしまいました.

$ scrcpy --v4l2-sink /dev/video8
scrcpy 1.23 <https://github.com/Genymobile/scrcpy>
INFO: Video orientation is locked for v4l2 sink. See --lock-video-orientation.
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed. 6.8 MB/s (41123 bytes in 0.006s)
[server] INFO: Device: motorola moto g31(w) (Android 11)
INFO: Renderer: opengl
INFO: OpenGL version: 3.0 Mesa 20.0.8
INFO: Trilinear filtering enabled
INFO: Initial texture: 1080x2400
ERROR: Failed to open output device: /dev/video8
ERROR: Could not open frame sink 1
ERROR: Could not open decoder sinks
ERROR: Could not open packet sink 0
ERROR: Could not open demuxer sinks
WARN: Device disconnected
WARN: Killing the server...

このデバイスは存在するし,別のアプリケーションから動画を流し込むと動作します.

issueを検索すると以下のコメントを見つけました.

以下のコマンドでsnapのscrcpyにビデオデバイスを接続する必要があるようです.

$ snap connect scrcpy:camera

認識させたあと実行するとうまく行きました.

$ scrcpy --v4l2-sink /dev/video8 --lock-video-orientation --max-size=720 -N
scrcpy 1.23 <https://github.com/Genymobile/scrcpy>
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed. 10.6 MB/s (41123 bytes in 0.004s)
[server] INFO: Device: motorola moto g31(w) (Android 11)
INFO: v4l2 sink started to device: /dev/video8

scrcpy snap2video

環境
$ snap info scrcpy | grep installed:
installed:          v1.23                        (379)  87MB -
$ dpkg-query -W snap v4l2loopback-dkms v4l2loopback-source v4l2loopback-utils
snap
v4l2loopback-dkms       0.12.5-1
v4l2loopback-source     0.12.5-1
v4l2loopback-utils      0.12.5-1
$ lsb_release -dr
Description:    Debian GNU/Linux 11 (bullseye)
Release:        11
$ uname -a
Linux yoga-260 5.16.15-le9 #10 SMP PREEMPT Sat Mar 19 01:52:06 JST 2022 x86_64 GNU/Linux
$ arch
x86_64
]]>
https://matoken.org/blog/2022/03/29/output-android-device-screen-to-video-device-with-snap-version-scrcpy/feed/ 2
scrcpyを使ってAndroidスマートフォンの動画をPCで視聴する https://matoken.org/blog/2022/03/29/watch-videos-on-your-android-smartphone-on-your-pc-using-scrcpy/ https://matoken.org/blog/2022/03/29/watch-videos-on-your-android-smartphone-on-your-pc-using-scrcpy/#comments Mon, 28 Mar 2022 22:20:14 +0000 http://matoken.org/blog/?p=3555

今日最終回でしたが,マンガUp!というアプリで他のsiteより12時間早く配信されているのに気づきました.でもモバイルアプリでないと視聴できません.手元ではスマートフォンしか無いので画面が小さい.

そういえば以前試したscrcpyだと画面キャプチャ禁止のアプリでも大丈夫だったのでこれでPCに画面転送してそちらで視聴すればいつもの画面で視聴できるのではと試してみました.

Note
音声についてはscrcpyのaudioブランチを自分でbuildして --forward-audio オプションを利用することで転送できそう ですが私は未確認で現在はBluetooth A2DP-source でPCに転送しています.3.5mm Audio cableなどでも良さそうです.

まずは以前試したページを参考にscrcpyを使えるようにします.

さくっと動いたのですが,スマートフォンとPCのアスペクト比が違うので黒枠が出来ていまいちです.

$ /bin/scrcpy
INFO: scrcpy 1.17 <https://github.com/Genymobile/scrcpy>
/usr/share/scrcpy/scrcpy-server: 1 file pushed. 5.7 MB/s (34015 bytes in 0.006s)
[server] INFO: Device: motorola moto g31(w) (Android 11)
INFO: Renderer: opengl
INFO: OpenGL version: 4.6 (Compatibility Profile) Mesa 20.3.5
INFO: Trilinear filtering enabled
INFO: Initial texture: 2400x1080

scrcpy bar

PCの解像度は 1366×720 でスマートフォンは 2480×1080 なのでスマートフォン画面を真ん中だけくり抜くと良さそうです. --crop オプションを使ってみます.

$ scrcpy --crop=1080:1920:0:$(( (2480-1920)/2 )) \ (1)
    --encoder OMX.google.h264.encoder \ (2)
    --max-size=1366 \ (3)
    --fullscreen (4)
INFO: scrcpy 1.17 <https://github.com/Genymobile/scrcpy>
/usr/share/scrcpy/scrcpy-server: 1 file pushed. 7.2 MB/s (34015 bytes in 0.005s)
[server] INFO: Device: motorola moto g31(w) (Android 11)
INFO: Renderer: opengl
INFO: OpenGL version: 4.6 (Compatibility Profile) Mesa 20.3.5
INFO: Trilinear filtering enabled
INFO: Initial texture: 1360x768
  1. --crop で真ん中をくり抜き
  2. エンコーダにPCでハードウェア対応しているH.264を利用
  3. サイズをPCに合わせて制限
  4. フルスクリーン表示

うまくいきました :)

scrcpy crop

他のPCでは動かないけどスマートフォンでは動くものでも応用が効きそうです.

環境
$ dpkg-query -W scrcpy adb
adb     1:10.0.0+r36-7
scrcpy  1.17-1
$ lsb_release -dr
Description:    Debian GNU/Linux 11 (bullseye)
Release:        11
$ arch
x86_64
]]>
https://matoken.org/blog/2022/03/29/watch-videos-on-your-android-smartphone-on-your-pc-using-scrcpy/feed/ 1
povo 2.0のSIMがmotorola moto g31で通信できない https://matoken.org/blog/2022/03/07/sim-of-povo-2-0-cannot-connect-network-with-motorola-moto-g31/ https://matoken.org/blog/2022/03/07/sim-of-povo-2-0-cannot-connect-network-with-motorola-moto-g31/#comments Mon, 07 Mar 2022 14:23:44 +0000 http://matoken.org/blog/?p=3518

先日,goo Simseller のOCNモバイルoneへのMVNOで1円で入手したmotorola moto g31ですが,povo 2.0のSIMをさして設定しても通信が出来ません.
ステータスはこんな感じで x マークが付いています.

g31 lte ng

自宅は電波があまり届かないのでそのせいかと思いましたが,電波の強い地域でも同じ. 111 に電話すると通話は可能です.
もともと使っていた EssentialPhone PH-1 では使えていたので端末側の問題だと思います.

接続設定は公式ページを参考に設定しました.打ち間違いとかよくあるので何度か設定を削除して作成しなおしや再起動.デュアルSIM環境が良くないのかもと1枚だけにしたりもしましたが動作は変わりません.

入力いただく項目

povo2.0

povo.jp

IPv4 / IPv6

※その他の項目は入力不要です。

以下のページも確認しましたが関係無さそう.

あまり関係ないと思うけど対応端末のリストを確認すると存在します.

$ w3m -dump 'https://povo.jp/product/#SIM' | grep g31
  • moto g31

この辺りで検索してみるとこのページを見つけました.

povoサポートチャット担当の人が、途中で切断されてしまった、としてあとから補足のメールをくれました。
APNに以下を追加編集してください、とのことでコピペしたら無事4Gを拾えるようになりました。

APNタイプ:default,supl,dun,hipri

これを真似してAPNタイプを default,supl,dun,hipri に設定することでステータスバーから x が消えて通信できるようになりました.

g31 lte ok

元の設定を確認してみるとこういう内容でした.

APNタイプ: default,mms,supl,dun,hipri,fota,ims,cbs,xcap

g31 default apn type

この中の xcap を削っても通信できました.

APNタイプ: default,mms,supl,dun,hipri,fota,ims,cbs

g31 default apn type  xcap

以下のページを見ると default のみで大丈夫そう.

てことでテザリングも含めてまとめるとこういう感じになりました.moto g31の規定値以外は大丈夫という結果でした. default のみが良さそうです.

APNタイプ 通信 テザリング

povo→povo2.0にしましたが、データ通信ができません…​ – Yahoo!知恵袋

default,supl,dun,hipri

OK

OK

g31既定値

default,mms,supl,dun,hipri,fota,ims,cbs,xcap

NG

手探り

default,mms,supl,dun,hipri,fota,ims,cbs

OK

OK

APN設定が完了しデータ通信はできるが、テザリングが利用できません。 – povoサポート

default

OK

OK

]]>
https://matoken.org/blog/2022/03/07/sim-of-povo-2-0-cannot-connect-network-with-motorola-moto-g31/feed/ 1
Androidで充電中に画面がスリープしなくなって困る https://matoken.org/blog/2021/06/22/screen-sleep-while-charging-on-android/ https://matoken.org/blog/2021/06/22/screen-sleep-while-charging-on-android/#respond Mon, 21 Jun 2021 23:09:33 +0000 http://matoken.org/blog/?p=3280

いつの間にかAndroid端末が充電中にもずっと画面がOnのままになってしまいました.充電時間が伸びるし電気が無駄です.

なにかの設定を触ってしまったのだろうと調べてみました.

まずは「設定」の「画面設定」見てみます.
「スリープ」という項目があって,「無操作状態で1分後に画面消灯をします」という設定になっているので問題なさそうです.

他に設定がないか探してもよくわからないので「設定」の右上の虫メガネアイコン🔍から「スリープ」と入力して探してみると,「設定」→「開発者オプション」の「スリープモードにしない」という設定がOnになっているのを見つけました.

android sleep01

android sleep02

これをOffにすることで,充電中にもスリープするようになりました.

環境
$ adb shell getprop ro.build.fingerprint
Sony/D5503/D5503:5.1.1/14.6.A.1.236/2031203603:user/release-keys
$ adb shell getprop ro.product.cpu.abilist
armeabi-v7a,armeabi
]]>
https://matoken.org/blog/2021/06/22/screen-sleep-while-charging-on-android/feed/ 0
Amazon Kindleで書籍が購入できなくて困る https://matoken.org/blog/2021/04/14/amazon-kindle/ https://matoken.org/blog/2021/04/14/amazon-kindle/#respond Tue, 13 Apr 2021 21:19:35 +0000 http://matoken.org/blog/?p=3212

川尻こだま(@kakeakami)さん の本が出たってことで普段あまり使わないKindleアプリを起動して読もうと思ったのですが,以下のメッセージが表示されて購入処理(無料だけど)できません.

このタイトルは現在ご購入いただけません。初めてKindle本をご購入される場合は、「コンテンツと端末の管理」の設定から1-Click設定をおこなってください。

以前は問題なく購入も出来ていたアカウント&端末なのだけど該当の設定を探してみるも問題はなさそう.
他の設定を見ていくとおかしそうな場所を見つけました.

kindle de

「国/地域設定」が「ドイツ連邦共和国」になっています🇩🇪
これを「変更」ボタンから日本に変更(実際は住所電話番号が必要だった)することで「今すぐ無料で取得」というボタンが表示されるようになり,そこから取得して読むことができるようになりました.

このあたりの設定は変更した覚えがないのですがなんで変わっていたのだろう?

環境
$ adb shell dumpsys package com.amazon.kindle | grep 'versionName='
    versionName=8.40.0.100(1.3.238418.0)
$ getprop ro.bootimage.build.fingerprint
essential/mata/mata:10/QQ1A.200105.032/540:user/release-keys
$ getprop ro.build.version.security_patch
2020-02-05
$ getprop ro.product.cpu.abilist
arm64-v8a,armeabi-v7a,armeabi
]]>
https://matoken.org/blog/2021/04/14/amazon-kindle/feed/ 0
PCでAndroid端末の画面転送と操作が出来るscrcpy https://matoken.org/blog/2020/12/10/scrcpy-that-can-transfer-and-operate-the-screen-of-android-terminal-with-pc/ https://matoken.org/blog/2020/12/10/scrcpy-that-can-transfer-and-operate-the-screen-of-android-terminal-with-pc/#comments Thu, 10 Dec 2020 13:15:14 +0000 http://matoken.org/blog/?p=2891

Debian sid amd64環境ではパッケージがあるので簡単です,armhf/amd64/i386環境ではsnap版が存在します.その他幾つかのLinuxディストリビューションではパッケージがあったり,WindowsやmacOSでも動作するようです.

手元ではDebian sid amd64で動作しました.(Raspberry Pi OS armhfにsnap版を入れた環境ではエラーが発生.内容は未だ未確認)

Debian sid amd64環境だと以下のような感じで導入できました.このときAndroid端末は「開発者向けオプション」が有効になっていて,「USBデバッグ」が有効になっている状態でUSB接続されている必要があります.

Debian sid amd64環境での導入例
$ sudo apt install adb scrcpy (1)
$ lsusb (2)
  :
Bus 002 Device 013: ID 05c6:9024 Qualcomm, Inc. SDM439-MTP _SN:472BF8D8
  :
$ echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="05c6" ATTR{idProduct}=="9024", MODE="0660", GROUP="plugdev", SYMLINK+="android%n"' \
| sudo tee -a /etc/udev/rules.d/51-android.rules (3)
$ sudo udevadm control --reload (4)
$ adb devices (5)
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached
976d6a56        device
  1. 必要パッケージの導入
  2. AndroidのVID/PIDを確認(ここでは 05c6:9024 )
  3. adbコマンドが利用できるようにAndroid端末をudev roureに登録
  4. udev ruleを反映する
  5. adbコマンドで認識出来るのを確認

この状態で,scrcpy を実行することでAndroidの画面転送が出来ました.普通に操作も出来ます.
スリープ状態のときは画面が真っ黒ですが,マウス右クリックで解除されます.

$ scrcpy
INFO: scrcpy 1.14 <https://github.com/Genymobile/scrcpy>
/usr/share/scrcpy/s...93 bytes in 0.008s)
[server] INFO: Device: TINNO C330 (Android 9)
INFO: OpenGL shaders: ENABLED
INFO: Created renderer: opengl
INFO: Renderer: opengl
INFO: OpenGL version: 3.0 Mesa 20.2.4
INFO: Trilinear filtering enabled
INFO: Initial texture: 720x1280

20201210 21:12:59 2112960.resized20201210 21:12:31 2113779.resized20201210 21:12:30 2115127.resized

導入も簡単だしこれは便利.しかしメイン端末ではPCにUSB接続するとすぐに充電しなくなってしまうので長時間は使えません.

adb のワイヤレス接続の設定をすると別の端末や充電器で充電しながら利用できそうなので試してみました.

対象のAndroid端末をPCにUSB接続した状態で tcpip コマンドでリモート接続できるようにします.

$ adb tcpip 5555
restarting in TCP mode port: 5555

この状態でPCからAndroid端末を取り外し,Wi-Fi接続のIPアドレスを確認します.

PCでadbコマンドでAndroid端末に接続します.

$ adb connect <ANDROID_IP>>:5555

この状態で scrcpy コマンドを実行すると画面が表示され操作できます.充電器などに接続した状態でも利用できます :)

scrcpy には幾つかオプションがあります.便利そうなものとしては最大解像度を指定する -m, --max-size value で解像度を下げて表示できます,
-n, --no-control で表示だけで操作できなくします.
-r, --record file で画面を録画します.
-w, --stay-awake でscrcpyを実行中Android画面をロック,消灯しません.
-S, --turn-screen-off Android端末のスクリーンを消したまま操作できます.

ショートカットでは
Ctrl + h, マウス中キー でホームボタン,
Ctrl + r でAndroid画面回転,
Ctrl + s でアプリケーション切り替え,
辺りが便利そうです,

Ctrl + c でクリップボードのコピーなのですが,一旦Android側でコピーした後に Ctrl + c でPCへのクリップボードコピーのようです,Ctrl + v の貼り付けもAndroid感での貼り付けで,PCからAndroidのクリップボード貼り付けは Ctrl + Shift + v でした.

詳細は scrcpy --help を参照してください.

これでElectronアプリでPCで動かしているアプリをスマホで……とも思ったのですが日本語入力などはちょっと面倒.もう少し様子見しようと思います.

]]>
https://matoken.org/blog/2020/12/10/scrcpy-that-can-transfer-and-operate-the-screen-of-android-terminal-with-pc/feed/ 3
LinuxとAndroidで動作するGoogle Keep代替を探す https://matoken.org/blog/2019/10/18/find-a-google-keep-alternative-that-works-on-linux-and-android/ https://matoken.org/blog/2019/10/18/find-a-google-keep-alternative-that-works-on-linux-and-android/#respond Fri, 18 Oct 2019 13:27:42 +0000 http://matoken.org/blog/?p=2583

Google Keepはメモアプリです.Evernoteに似ていますがもう少し機能が少ない感じ.

自分は主にTodoや買い物リストなどにKeepを利用しています.PCやAndroidで買い物をメモしてお店でAndroidのメモを見ながら買い物してチェックボックスをチェックしていく感じです.
メモの数もまだ少ないし使っている機能も少ないので代替になるものがあるのではと探してみました.

要件としてはこんな感じ

  • OSS
  • サーバ側はWebDAVなどでセルフホストが利用可能
    • 若しくはクラウドサービスを使うけどE2EEが利用可能
  • LinuxとAndroidで動作する
    • Android版では買い物メモをデスクトップウィジットで表示したい

Joplin

現在EvernoteとZim Wikiから乗り換えて作業メモなどに利用しています.サーバはNextcloudなどWebDAVが利用でき,単体でE2EEが可能です.
LinuxではAppimageやnodeでのcli版もあり,cli版はarmなどでも動作します.

既にあるノートを全部同期するのは大変,同期ディレクトリを分けることは出来ますがクライアントは1箇所しか登録できないので難しい.ノートブック単位で同期できればいいのですが今の所出来ないようです

それとAndroidでのウィジットはフレームワークでサポートされていないので今の所サポートされないようです(◞‸◟)

とりあえず見送りです.

Carnet

Google Keep代替のアプリのようです.Linux,Android,Webで利用でき,デスクトップ版はElectron製のAppimageが用意されていてGoogle Keepからのインポート機能も付いています.これはGoogle TakeoutでExportして展開したものを指定することでインポートできるようです.
同期先サーバはNextcloudかCarnetのサービスの https://carnet.live です.

今の所暗号化は未対応.

AndroidでのウィジットはIssueに上がっています.

Linux armで動作しない&暗号化未対応だけれどelectronではないLinuxアプリを開発中だし暗号化もウィジェットもIssueにあがっているので将来に期待しつつGoogle Keepをインポートして試してみようと思います.(Takeout待ち……)

add)
Web版はhttps://carnet.live だけかと思っていたのですが,NextcloudアプリのCarnetを導入することでNextcloudでWeb版が利用できます.

add)
インポートしてみました.

]]>
https://matoken.org/blog/2019/10/18/find-a-google-keep-alternative-that-works-on-linux-and-android/feed/ 0
termux-APIのTermux-usbを少し試す https://matoken.org/blog/2019/10/07/try-termux-api-termux-usb-a-little/ https://matoken.org/blog/2019/10/07/try-termux-api-termux-usb-a-little/#respond Mon, 07 Oct 2019 12:35:09 +0000 http://matoken.org/blog/?p=2556

Androidでdeb系ぽいLinux環境を実現できるTermuxからAndroidを操作するAPIのTermux-APIのupdateがありました.

termux api usb 01

Add a USB API compatible with libusb – see https://wiki.termux.com/wiki/Termux-usb for more information.

なんだか気になる更新内容です.

早速試してみます.

まずはパッケージを最新にして関連パッケージを導入
$ pkg update
$ pkg install root-repo
$ pkg install termux-api
$ pkg install libusb
$ pkg install clang
termux-usb コマンドでデバイスを確認してアクセス許可を与える(ここではUSBメモリ)
$ termux-usb -l
[
  "/dev/bus/usb/001/004"
]
$ termux-usb -r /dev/bus/usb/001/004
Access granted.

アクセスの許可はAndroidの画面で操作が必要です.

termux api usb 02

ちなみに,USB Keyboardは認識できませんでした(Androidでは利用できているのに!)

lsusb的にusb情報を表示するプログラムのサンプルをコンパイルして実行
$ cat << __EOF__ > usbtest.c
> $ cat usbtest.c
> #include <stdio.h>
> #include <assert.h>
> #include <libusb-1.0/libusb.h>
>
> int main(int argc, char **argv) {
>     libusb_context *context;
>     libusb_device_handle *handle;
>     libusb_device *device;
>     struct libusb_device_descriptor desc;
>     unsigned char buffer[256];
>     int fd;
>     assert((argc > 1) && (sscanf(argv[1], "%d", &fd) == 1));
>     assert(!libusb_init(&context));
>     assert(!libusb_wrap_sys_device(context, (intptr_t) fd, &handle));
>     device = libusb_get_device(handle);
>     assert(!libusb_get_device_descriptor(device, &desc));
>     printf("Vendor ID: %04x\n", desc.idVendor);
>     printf("Product ID: %04x\n", desc.idProduct);
>     assert(libusb_get_string_descriptor_ascii(handle, desc.iManufacturer, buffer, 256) >= 0);
>     printf("Manufacturer: %s\n", buffer);
>     assert(libusb_get_string_descriptor_ascii(handle, desc.iProduct, buffer, 256) >= 0);
>     printf("Product: %s\n", buffer);
>     assert(libusb_get_string_descriptor_ascii(handle, desc.iSerialNumber, buffer, 256) >= 0);
>     printf("Serial No: %s\n", buffer);
>     libusb_exit(context);
> }
> __EOF__
$ gcc usbtest.c -lusb-1.0 -o usbtest
$ termux-usb -e ./usbtest /dev/bus/usb/001/004
Vendor ID: 13fe
Product ID: 3600
Manufacturer:
Product: USB DISK 2.0
Serial No: 07AC10081C16381A

てことでTermuxからlibusbが使えるようになったようです.

ちなみに,lsusbを実行するとこんな感じです.rootedな端末だと使えるんでしょうけど.

$ lsusb
lsusb: /sys/bus/usb/devices: Permission denied
$ tsudo lsusb
/data/data/com.termux/files/usr/bin/tsu: 146: exec: : Permission denied
環境
$ dpkg-query -W termux-api libusb clang
clang   8.0.1-4
libusb  1.0.23-rc1-1
termux-api      0.47
$ adb shell dumpsys package com.termux.api | grep -E 'versionCode|versionName'
    versionCode=38 minSdk=21 targetSdk=28
    versionName=0.38
$ adb shell dumpsys package com.termux | grep -E 'versionCode|versionName'
    versionCode=75 minSdk=21 targetSdk=28
    versionName=0.75
$ getprop ro.bootimage.build.fingerprint
essential/mata/mata:10/QP1A.190711.122/420:user/release-keys
$ getprop ro.build.version.security_patch
2019-09-05
$ getprop ro.product.cpu.abilist
arm64-v8a,armeabi-v7a,armeabi
]]>
https://matoken.org/blog/2019/10/07/try-termux-api-termux-usb-a-little/feed/ 0
ffmpegでgifからmp4に変換した動画がInstagramに投稿できない https://matoken.org/blog/2019/10/05/videos-converted-from-gif-to-mp4-with-ffmpeg-cannot-be-posted-on-instagram/ https://matoken.org/blog/2019/10/05/videos-converted-from-gif-to-mp4-with-ffmpeg-cannot-be-posted-on-instagram/#respond Sat, 05 Oct 2019 12:40:59 +0000 http://matoken.org/blog/?p=2550

先日のttygifで作成したanimation gifをInstagramに投稿しようとしたところ,animation gifは投稿できるけどanimationせず1枚目の画像が表示されるだけです.ffmpegでmp4に変換するだけで良さそうだけど投稿できません.白い動画でプログレスがずっと表示され,「次へ」を押すとアプリ自体が落ちてしまいます.動画は同端末のvlcなどでは問題なく再生できています.

IMG 20191005 195714

$ ffmpeg -i tty.gif tty.mp4

音声がないのがいけないのかな?と anullsrc フィルタで無音の音声トラックを追加してみても変わらず.

$ ffmpeg -f lavfi -i anullsrc -i tty.gif -shortest tty.mp4

手詰まりになって検索してみると以下のページを発見.

このページによると以下の条件で投稿できないようです.

  • 3秒以下の動画
  • Instagramが受け付けないカラーエンコーディングの利用

今回の動画は20秒ほどなので長さは問題無さそうです.

うまく行っていなかった動画を確認すると元記事と同様 yuv444p を使っているようです.

$ ffprobe tty.mp4 2>&1 | grep -E "Stream.*Video"
    Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv444p, 802x750, 73 kb/s, 4.17 fps, 4.17 tbr, 12800 tbn, 8.33 tbc (default)

てことで,以下のようにカラーエンコーディングに yuv420p を指定して変換すると投稿できました.(音声トラックはあってもなくてもどちらでもOKだった)

$ ffmpeg -i tty.gif -pix_fmt yuv420p -filter_complex "scale=trunc(iw/2)*2:trunc(ih/2)*2" tty.mp4
$ ffprobe tty.mp4 2>&1 | grep -E "Stream.*Video"
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1058x750, 97 kb/s, 16.08 fps, 16.08 tbr, 12352 tbn, 32.17 tbc (default)

この投稿をInstagramで見る

pfetch logo #unix

matokenさん(@matoken)がシェアした投稿 –

公式の文章があればいいんですが見つからず.以下が少し近い?

変換環境
$ dpkg-query -W ffmpeg
ffmpeg	7:4.1.4-1+b2
$ lsb_release -dr
Description:	Debian GNU/Linux bullseye/sid
Release:	unstable
$ uname -m
x86_64
投稿環境
$ adb shell dumpsys package com.instagram.android | grep -E 'versionCode|versionName'
    versionCode=175574628 minSdk=23 targetSdk=28
    versionName=113.0.0.39.122
$ adb shell getprop ro.bootimage.build.fingerprint
essential/mata/mata:10/QP1A.190711.122/420:user/release-keys
$ adb shell getprop ro.build.version.security_patch
2019-09-05
$ adb shell getprop ro.product.cpu.abilist
arm64-v8a,armeabi-v7a,armeabi
]]>
https://matoken.org/blog/2019/10/05/videos-converted-from-gif-to-mp4-with-ffmpeg-cannot-be-posted-on-instagram/feed/ 0