いつの間にかAndroid端末が充電中にもずっと画面がOnのままになってしまいました.充電時間が伸びるし電気が無駄です.
なにかの設定を触ってしまったのだろうと調べてみました.
いままで描いたツイッター漫画、Kindleでまとめ本にしたよ
第一集: 「いなげやの話 他」 川尻こだまのただれた生活 川尻こだま https://t.co/aEPBKwpz54 pic.twitter.com/kydzHXT3kp
— 川尻こだま まとめ本投稿した (@kakeakami) April 11, 2021
川尻こだま(@kakeakami)さん の本が出たってことで普段あまり使わないKindleアプリを起動して読もうと思ったのですが,以下のメッセージが表示されて購入処理(無料だけど)できません.
Debian sid amd64環境ではパッケージがあるので簡単です,armhf/amd64/i386環境ではsnap版が存在します.その他幾つかのLinuxディストリビューションではパッケージがあったり,WindowsやmacOSでも動作するようです.
手元ではDebian sid amd64で動作しました.(Raspberry Pi OS armhfにsnap版を入れた環境ではエラーが発生.内容は未だ未確認)
Debian sid amd64環境だと以下のような感じで導入できました.このときAndroid端末は「開発者向けオプション」が有効になっていて,「USBデバッグ」が有効になっている状態でUSB接続されている必要があります.
$ 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 device05c6:9024 )この状態で,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
導入も簡単だしこれは便利.しかしメイン端末では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で動かしているアプリをスマホで……とも思ったのですが日本語入力などはちょっと面倒.もう少し様子見しようと思います.
Google Keepはメモアプリです.Evernoteに似ていますがもう少し機能が少ない感じ.
自分は主にTodoや買い物リストなどにKeepを利用しています.PCやAndroidで買い物をメモしてお店でAndroidのメモを見ながら買い物してチェックボックスをチェックしていく感じです.
メモの数もまだ少ないし使っている機能も少ないので代替になるものがあるのではと探してみました.
要件としてはこんな感じ
現在EvernoteとZim Wikiから乗り換えて作業メモなどに利用しています.サーバはNextcloudなどWebDAVが利用でき,単体でE2EEが可能です.
LinuxではAppimageやnodeでのcli版もあり,cli版はarmなどでも動作します.
既にあるノートを全部同期するのは大変,同期ディレクトリを分けることは出来ますがクライアントは1箇所しか登録できないので難しい.ノートブック単位で同期できればいいのですが今の所出来ないようです
それとAndroidでのウィジットはフレームワークでサポートされていないので今の所サポートされないようです(◞‸◟)
とりあえず見送りです.
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)
インポートしてみました.
Androidでdeb系ぽいLinux環境を実現できるTermuxからAndroidを操作するAPIのTermux-APIのupdateがありました.
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の画面で操作が必要です.
ちなみに,USB Keyboardは認識できませんでした(Androidでは利用できているのに!)
$ 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先日のttygifで作成したanimation gifをInstagramに投稿しようとしたところ,animation gifは投稿できるけどanimationせず1枚目の画像が表示されるだけです.ffmpegでmp4に変換するだけで良さそうだけど投稿できません.白い動画でプログレスがずっと表示され,「次へ」を押すとアプリ自体が落ちてしまいます.動画は同端末のvlcなどでは問題なく再生できています.
$ ffmpeg -i tty.gif tty.mp4
音声がないのがいけないのかな?と anullsrc フィルタで無音の音声トラックを追加してみても変わらず.
$ ffmpeg -f lavfi -i anullsrc -i tty.gif -shortest tty.mp4
手詰まりになって検索してみると以下のページを発見.
このページによると以下の条件で投稿できないようです.
今回の動画は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)公式の文章があればいいんですが見つからず.以下が少し近い?
$ 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近頃はOsMoで検索すると,DJIのドローンやジンバルが出てくるようになっていますがOsMoはそういうものではなく,位置情報共有サービスです.スマートフォンにアプリを導入して共有URLで今自分の居る場所を共有できます.Glympseなどが類似サービスになると思います.
このOsMoですが,最近サーバがダウンして利用できなくなりました.(一応オフラインでローカルにログを取得することは可能)
OsMoのアプリ(OsMoDroid)を導入していると,telegramに誘導するメッセージが表示されるようになりました.
このチャンネルを覗くとサーバが(物理的に?)失われて,更にバックアップが05/15のものしか無いようで,そのデータで復旧を試みようとしているけど未だホスト先を探している状態のようです.
復旧までにはまだまだ掛かりそうなです.
Константин Гам, [22.08.19 02:57]
Что произошло? Сервер приложения OsMo и сайта повреждён, сгорел диск. Потеряны все данные пользователей. Из-за несработавшего бекапа, последняя полная копия проекта датируется 15 мая 2019 года.
Диск заменили, но требуется много работы по запуску проекта с нуля и дальнейшее накатывание копии от мая…Собираем на восстановление сервера осмо (часы + сервера + тонна кофе), 5200/60000 руб
VISA: 4083 9720 5573 2954
QIWI: +7 (921) 426-74-00В комментарий указывайте email аккаунта, если есть или будущего. Всем кто донатит 1500+ рублей, максимальный PRO пожизненно.
Если комментарий недоступен, кидайте время и место платежа в почту osmo.mobi@gmail.com
OsMoが使えない間の代替サービスを探そうと思いましたが,そういえば以前PhoneTrackというアプリケーションを導入していたのを思い出しました.
PhoneTrackはNextcloudのアプリケーションとして導入して,位置情報アップロード用のURLを発行して各種アプリケーションで位置情報をアップロード,この情報を共有URLで共有することも出来ます.
対応アプリケーションも色々あります.私はOsmAnd+,Uloggerを利用しています.
以下はOsmAnd+での設定例です.
位置情報共有用のURLは長いのですが,QRcodeで読み取ることも出来ます :)
長時間動かすことが多いので消費電力の少ない設定やアプリを探そうと思います.
Android 端末側でUSB デバッグを有効にしてUSB接続する.
デバイスが認識されているか確認.
$ adb devices List of devices attached PM1LHMA861102833 device
HostPC の adb コマンドで tcpip コマンドで接続できるようにして,connect コマンドで Android 端末の ip を指定して接続します.
5555 はポート番号で 5555 が規定値.既定値から変更した場合は,connect コマンドの ip の後ろにポート番号の指定が必要になります.
$ adb tcpip 5555 $ adb connect 192.168.1.200 connected to 192.168.1.200:5555
この状態でusb 接続を解除して devides コマンドに居ます :)
後は普通に使えます.
$ adb devices List of devices attached 192.168.1.200:5555 device $ adb logcat|head -1 --------- beginning of crash ^C
そして本命のバックアップ.
$ time adb backup -f ./PH-1.ab -all Now unlock your device and confirm the backup operation... real 26m2.104s user 0m0.171s sys 0m5.725s
用事が終わったら切断しておいたほうが安心ですね.
$ adb disconnect 192.168.1.200 disconnected 192.168.1.200 $ adb devices List of devices attached
mata:/ $ getprop ro.bootimage.build.fingerprint essential/mata/mata:9/PQ1A.190105.058/496:user/release-keys mata:/ $ getprop ro.build.version.security_patch 2019-05-05 mata:/ $ getprop ro.product.cpu.abilist arm64-v8a,armeabi-v7a,armeabi
$ dpkg-query -W adb adb 1:8.1.0+r23-5 $ lsb_release -dr Description: Debian GNU/Linux 10 (buster) Release: 10 $ uname -m x86_64
セキュアなメールサービスの ProtonMail と同じ Proton Technologies AGの VPN サービスの ProtonVPN を少し試してみました.
存在は知っていましたが接続するには専用アプリのみが必要だと思いこんでいました.openVPN で接続できるようなので試してみました.
ここでの VPN は拠点間などではなくスマートフォンやPCを公衆無線LANなどで接続したとき向けの個人向けVPNとしての話です.
無料VPNサービスはいろいろ見つかりますが,無料の代わりに個人情報を収集して販売していたりプライバシーポリシーでそういうことをしないとしつつも実際は行っていたりと怪しいものが多いです.
知識のある人であれば自宅にSBCなどで低価格,低消費電力でVPNサーバを用意したり,VPNサービスより安い価格のVPSサービスにセットアップして利用するなどといったことが可能ですが,知識のない人にサーバを立ててもらうのは難しいです.(一旦設定した後も使い続ける間はOSやサービスのアップデートなども必要だし……)
ProtonVPN は有料プランの他に無料プランがあり,無料プランでもプライバシーやセキュリティが守られるとなっています.無料はお試し版という扱いですね.無料プランでは接続できるサーバが限られており,無料プランで接続できるサーバは事に比べて利用率が高くなっています.時間帯によっては100%になっているので速度は低下すると思います.
実際にプライバシーやセキュリティが守られるのかが不安ですが,もともとジャーナリストや活動家を守るために作られたものであったり,MozillaがFirefoxに向けてのVPNサービスにProtonVPNを選ぶなどそれなりに信頼できそうな気がします.(少なくとも今の時点では)
ProtonVPN を利用するためにアカントを作成します.
手順は以下に書かれています.メールアカウントが別途必要です.また,ProtonMail のアカウントを使ってProtonVPN のアカウントを作成するとこも出来るようなので私は ProtonMail でアカウントを作成しました.
お手軽にNetwork Manager の openVPN プラグインを利用して接続します.
以下に手順があるので真似します.
(GUIのNetwork Manager 以外にも command-line や IKEv2 での接続方法もあるようです.)_
必要なパッケージを導入します.
$ sudo apt install openvpn network-manager-openvpn-gnome resolvconf
ProtonVPN の設定ファイルを入手します.
続いてNetwork Manager の設定をします.



接続してみます.
リモートアドレスなどを確認するとVPN のものに変わっていました.
$ curl ifconfig.me/ip
185.242.4.204
$ dig | grep -i server:
;; SERVER: 10.8.8.1#53(10.8.8.1)
$ /sbin/ifconfig tun0
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.8.3.2 netmask 255.255.255.0 destination 10.8.3.2
inet6 fe80::642a:6858:4f6:403 prefixlen 64 scopeid 0x20<link>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (不明なネット)
RX packets 11489 bytes 8367918 (7.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 11204 bytes 2610990 (2.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
$ whois 185.242.4.204
% This is the RIPE Database query service.
% The objects are in RPSL format.
%
% The RIPE Database is subject to Terms and Conditions.
% See -ripe.net - www.ripe.net/db/support/db-terms-conditions.pdf
% Note: this output has been filtered.
% To receive output for a database update, use the "-B" flag.
% Information related to '185.242.4.0 - 185.242.4.255'
% Abuse contact for '185.242.4.0 - 185.242.4.255' is 'abuse@m247.ro'
inetnum: 185.242.4.0 - 185.242.4.255
netname: M247-LTD-TOKYO
descr: M247 LTD Tokyo Infrastructure
country: JP
geoloc: 35.622214 139.7455763
admin-c: GBXS24-RIPE
tech-c: GBXS24-RIPE
status: LIR-PARTITIONED PA
mnt-by: GLOBALAXS-MNT
remarks: ---- LEGAL CONCERNS ----
remarks: For any legal requests, please send an email to
remarks: ro-legal@m247.ro for a maximum 48hours response.
remarks: ---- LEGAL CONCERNS----
created: 2018-01-17T11:32:30Z
last-modified: 2018-11-29T11:54:41Z
source: RIPE
role: GLOBALAXS TOKYO NOC
address: 2 Chome-1-17 Higashishinagawa, Shinagawa
address: Tokyo 140-0002, Japan
abuse-mailbox: abuse@m247.ro
nic-hdl: GBXS24-RIPE
mnt-by: GLOBALAXS-MNT
created: 2017-10-17T16:49:19Z
last-modified: 2018-07-18T11:04:41Z
source: RIPE # Filtered
% Information related to '185.242.4.0/24AS9009'
route: 185.242.4.0/24
origin: AS9009
mnt-by: GLOBALAXS-MNT
created: 2018-01-17T11:33:29Z
last-modified: 2018-01-17T11:33:29Z
source: RIPE
% This query was served by the RIPE Database Query Service version 1.92.6 (WAGYU)
速度については確認した回線がADSL で元々細いせいかVPN利用時,非利用時であまり変わりませんでした(400kB/s程).公衆無線LAN などでも試してみたいところです.
ちなみに,AndroidスマートフォンのProtonVPN を携帯回線で利用した状態で Wi-Fi 接続したら VPNのセッションは張り直されず Wi-Fi を利用しているつもりで携帯回線を使い続けていたということがありました.ちゃんと検証していないですが気をつけたほうが良さそうです.
OpenVPN Connect のほうがいいかも
Android環境
Android のバージョン:9
セキュリティパッチレベル: 2019年3月5日
Linux環境1
$ dpkg-query -W openvpn network-manager-openvpn-gnome resolvconf
network-manager-openvpn-gnome 1.8.10-1
openvpn 2.4.7-1
resolvconf 1.79
$ lsb_release -dr
Description: Debian GNU/Linux buster/sid
Release: unstable
$ uname -m
x86_64
Linux環境2
$ dpkg-query -W openvpn network-manager-openvpn-gnome resolvconf
network-manager-openvpn-gnome 1.8.10-1
openvpn 2.4.6-1ubuntu3
resolvconf 1.79ubuntu10
$ lsb_release -dr
Description: Ubuntu Disco Dingo (development branch)
Release: 19.04
$ uname -m
x86_64
通常の DNS は暗号化されず改ざんが可能です.Intra は DNS を暗号化する DNS-over-HTTPS を Android 4.0 以降で利用できるようにするアプリです.
自分は基本的に出先では VPN を利用しているので必要ないかなと思うのですが,お手軽に無料でかつ古いデバイスにも対応しているので良さそうですね.ちなみにこの機能は Android Pie には標準搭載されているそうです.
#Wi-FiなんかでDNS改ざんして認証画面に飛ばしたりするようなのはどういう動きになるんだろう?