kobar9568のブログ

技術的なメモやその他諸々

Android 9 Pieのtheme(overlay)周りに関するメモ(rooted)

Androidのテーマカラーをいい感じにしたかった時のメモ

はじめに

  • 実験機はSony G8342 (Xperia XZ1 Dual) + Phh-Treble AOSP 9.0 + Magisk
    • Trebleを使ったほぼAOSP環境
  • SonyXperiaシリーズをはじめ、ベンダーカスタムでテーマ機能を実装している端末もあるが、AOSPの機能の話

f:id:kobar9568:20200303024245p:plain

  • クイック設定パネル周りで特に目立つ機能
  • 後は設定アプリのアイコンの色とか、文字とか
  • この辺の見た目を変えたい

内部の動き的なやつ

  • 色の方(上の画像で言うスライダーの色とか)が、Accent color、背景の方はtheme(正式な呼び方が分からないけど)として、別れている どちらも、overlayとしてアプリになっている
  • 適当なAndroidのシェル(adb shellとかTermuxとか)でrootシェルでcmd overlay listでデバイスにインストールされているoverlayの一覧が確認できる
    • 現在適用されているoverlayもここで確認できる

f:id:kobar9568:20200303025222p:plain

問題点

  • Magiskモジュールとして、System-Accent-Theme-Colors-for-P(GitHub)と言う(恐らく)Androidが標準で持っているアクセントカラー選択機能を有効化するものがあるが、デバイスをダークテーマに設定していると、表示が崩れる
    • バイスがライトテーマなら、問題は無い
    • このモジュールをインストールして、cmd overlay listで確認すると、com.google.android.theme.(色名)というoverlayが追加されている
      • これらのoverlayは、Accent Colorしか持ってないので、別途テーマのoverlayが必要

解決

  • Pluvius(Google Play)というoverlayを弄ることの出来るアプリを使う
    • このアプリもデバイスにoverlayをインストールし、インストールされたoverlayをアプリから切り替えることが出来る
    • 但し、Pixelと同じアクセントカラーのoverlayは無かったので、先程のSystem-Accent-Theme-Colors-for-Pと組み合わせて、アクセントカラーは前者の、背景テーマカラーはPluviusのoverlayを使う

f:id:kobar9568:20200303031933p:plain

  • アクセントカラーにcom.google.android.theme.pixelを、テーマにfancystuff.overlay.systemui.grey900を適用

参考にしたやつ

Android P Blocks Custom Overlays (Substratum Themes) From Being Installed

Dark theme conflict, request for white accent · Issue #2 · LudwigVan33/System-Accent-Theme-Colors-for-P · GitHub

[APP] [8.0+] Pluvius - Dynamic OMS Framework… | Android Development and Hacking

メモ

  • Android 10からはテーマ変更機能が正式に使えるらしい?
  • Pieの時点では、正式な手順ではインストール時に固定されたテーマしか使えないっぽい
  • アクセントカラーを変更すると、設定アプリのアイコンの色とかが古いまま残ったりする ランチャーがキャッシュを持っているようなので、ランチャーのストレージを消して強制停止の上で上げ直すと更新される

Ubuntu Server 18.04でdump1090とfr24feedを動かす

御託

上空を飛行している航空機は、空中衝突を防止する為のシステムが備わっている。
航空業界の黎明期、今より規則やシステムが未熟だった頃にグランドキャニオン上空で起きた空中衝突事故をはじめ、数件の空中衝突事故があり、これを教訓として空中衝突を防止するシステムが構築された。
航空機衝突防止装置(ACAS; Airborne Collision Avoidance System)の実装である、
空中衝突防止装置(TCAS; Traffic alert and Collision Avoidance System)をはじめ、空中衝突を防止するシステムが構築されている。
TCASはトランスポンダのモードSを利用して周囲の航空機と通信を行い、位置関係や速度から衝突の危険があると判断すれば回避する操縦を行うよう指示を出す。
通信は質問と応答に分かれており、質問信号を1030MHzで送信、それに対する応答信号を1090MHzで返信するプロトコルになっている。
更に、トランスポンダが対応していてシステムが有効であれば、航空機の現在位置、速度、上昇率・降下率、進行方向等の追加情報を放送(ブロードキャスト)する自動従属監視放送(ADS-B; Automatic Dependent Surveillance-Broadcast)として追加情報がTCASの応答信号と同じ1090MHzで送信される。
TCASとADS-Bを組み合わせることでより遠距離から危険性を検知出来る。

はじめに

  • 航空機から1090MHzでブロードキャストされるTCAS, ADS-Bのデータを受信してFlightradar24にfeedする。
  • Flightradar24にfeedすると$499.9/yearのBusinessプランをタダで利用できる。
  • 今年の5月からUbuntu搭載モデルのIntel Compute Stickを使ってfeedしていたが、これをメインサーバーに収容する。
  • 特殊なハードとして1090MHzを受信出来るアンテナ、受信した信号をUSBで送ってくれるドングル、アンテナとドングルを接続するケーブルが必要となるが、これは海外のテレビ規格であるDVB-TのUSBTVチューナーを利用できる。

  • 付属のアンテナは1090MHzに最適なものではないが、一応受信可能。1500円前後のこのセットだけで始められる。
  • 有志が作成したドライバを利用することで、DVB-TのTVチューナーをSDRチューナー(SDR; Software-defined radio)として利用できるので、これで1090MHzにチューニングして航空機からの放送を傍受する。

注意点

  • 半年前ろくにドキュメント化せず適当に構築した環境を移行する流れだったのだが、結構苦労した。

fr24feedのsegfault

  • dump1090からデータを取得し、Flightradar24にfeedする為のソフトウェア、fr24feedだが、1.0.24-5Debian package amd64/x86_64を試したところ、私の環境だと起動直後にFlightradar24に接続まで行かず、segfaultで落ちてしまう現象があった。
  • 毎回発生するらしく、こうなると、掴んだdump1090を取り残して落ちてしまう。
  • 使い物にならないので、前回の構築時に使っていた1.0.18-5を使う事にした。
  • ダウンロードページからはダウンロード出来ないが、2019-12-25時点でファイルのリンクは生きていた。
  • あまり褒められた事ではないが、直リンはこれ
  • 1.0.18-5を使ったところ、問題なくfeed出来た。

dump1090のForkとバージョン

  • SDRレシーバーとなったドングルを使ってADS-Bを取得してくれる、dump1090だが、このソフトは多くのForkが存在する。
  • 大本がこれ
  • メンテナンスされなくなっているが、"mutability版"と呼ばれるFork。fr24feedの.debに含まれるのもこれ
  • dump1090-faと呼ばれる、FlightAwareのFork

前回はmutability版を使っていた。今回試しにdump1090-faを使ってみようと思ったのだが、依存パッケージに最新バージョンのものを要求するため、テスト用のKubuntu 19.04でしか動作しなかった。

メンテナンスされていないコードを使用するのはあまり良くないが、前回と同じくmutability版を使うことにした。

  • mutability版は、releasesからダウンロードしたソースはビルド出来ない。
  • リポジトリをcloneし、unmaintainedブランチのものを使う必要がある。

dump1090-mutabilityのビルド

  • ビルド用にDockerでビルド用コンテナを用意したので、細かめ。
  • debパッケージに固める。
# 取り敢えずパッケージリストのアップデート
sudo apt update

# gitのインストール
sudo apt install git

# ソースコードのclone
git clone https://github.com/mutability/dump1090.git
cd dump1090/
git checkout unmaintained # ブランチ切り替え

# ツール郡と依存ライブラリを用意
sudo apt install make gcc pkg-config               # ビルドに必要なツール郡
sudo apt install librtlsdr-dev libusb-1.0-0-dev # 依存ライブラリ
sudo apt install debhelper                               # .debに固める場合は追加で必要

# バイナリだけ作る場合
make # dump1090の実行ファイルが生成される

# .debに固める場合
dpkg-buildpackage -b # 一個上のディレクトリにdump1090-mutability_1.15~dev_amd64.debが生成される

dump1090のインストール

$ sudo apt install ./dump1090-mutability_1.15~dev_amd64.deb
  • debパッケージにしておけば、一発で入れられる。
  • 途中で自動起動の有効/無効を聞かれる。 fr24feedから使うなら、noにしておく。

fr24feedのインストール

$ wget http://feed.flightradar24.com/linux/fr24feed_1.0.18-5_amd64.tgz
$ tar -zxvf fr24feed_1.0.18-5_amd64.tgz

$ sudo cp fr24feed_amd64/fr24feed /usr/bin/

$ sudo chown root.root /usr/bin/fr24feed
$ sudo chmod 755 /usr/bin/fr24feed
  • 落としてきたアーカイブにバイナリが入っているので、適当な場所にコピーしておく。

fr24feedまわりの設定

  • /etc/fr24feed.iniにconfigの一部が保存される。
    • 環境移行の場合は、コピーして設置しておく。
  • /usr/lib/fr24/dump1090を用意する
  • ログファイルを吐くディレクトリを作っておく
$ sudo mkdir /usr/lib/fr24/
$ sudo ln -s /usr/bin/dump1090-mutability /usr/lib/fr24/dump1090
$ sudo mkdir /var/log/fr24feed/

実行

  • ここまで用意したら、適当な方法でfr24feedのバイナリを走らせればfeedされる。/etc/fr24feed.iniがあれば、初回設定はなしですぐにfeedに入る。

追記: Docker

  • で、結構面倒だったので最近触り始めたDockerの習得の意味も含めてDockerに閉じ込めることにした。

GitHub

  • バイナリの再配布がライセンス的によくわからないので含めていないが、resources/にビルドしたdump1090-mutability_1.15~dev_amd64.debと落としてきたfr24feedを設置してコンテナをbuildし、runすることでfeed出来る環境を用意した。

WindowsのChrome 78でOverlay Scrollbarを再度有効にする

  • 2019-12-12追記:Chrome 79では動作しない

はじめに

Windows版のChromeで、スクロールバーがダサいので、EXPERIMENTAL FEATURESからOverlay Scrollbarsを有効にして使っていた。
スクロールした時だけ表示されるシンプルなスクロールバーになり、快適に利用していたのだが、実験機能をReset all to defaultした拍子に元のダサいスクロールバーに戻ってしまった。

再度有効にしようとchrome://flagsを見たが、どうもここからは隠されてしまったらしい。あくまで実験機能なので文句は言えないが、やっぱりダサいスクロールバーは耐え難い。

調べてみると、同志が居た。

https://support.google.com/chrome/thread/14340482support.google.com

Chrome Devで9月にこの機能は削除されていたようだが、残念がる声が多いようだ。

再度有効にする

先程のスレッドのリプライを参考に、Local Stateファイルに直接変更を加えて有効にする。

  • 変更を加えるファイルはC:\Users\[Username]\AppData\Local\Google\Chrome\User Data\Local State
  • 中身はJSONで、1行に圧縮されている。

念の為にChromeを落とした上で、このファイルを適当なエディタで開き、browser":{"enabled_labs_experiments":[](キーで言えば['browser']['enabled_labs_experiments'])に"overlay-scrollbars@1"を入れれば良い。
browser":{"enabled_labs_experiments":["overlay-scrollbars@1"]こうなるはず。
保存した後にChromeを上げると、Overlay Scrollbarが有効になっている。

追記

Chrome79以降ではこれは通用しないというリプライもあり、そもそも実験機能を無理矢理有効にしているのは良くないとは思う。
が、これは正式機能として実装して欲しいと思う。何か不具合があったのだろうか…?

Android版Chromeのアップデートでおすすめの記事が復活したので無効化

再度無効化する

  • chrome://flagsより、Interest Feed Content SuggestionsDisabledに変更する。
  • Show server-side suggestions on the Net Tab pageInterest Feed Content SuggestionsがどちらもDisabledになっていると、新しいタブにおすすめの記事は表示されなくなる。

これまではShow server-side suggestions on the Net Tab pageのみを無効化していれば表示されなかったが、アップデートで変更されたらしい。

追記

  • ところで、Android Chrome UI dark modeが実験機能じゃなくなるのは何時だろうか…
  • あと、スキームとかサブドメインを隠蔽するOmnibox UI Hide Steady-State URL~系はインフラ系勉強してる身としては気持ち悪いのでDisabledにしている。
  • WindowsChromeでDeveloper Toolsがダークモードに対応したのはとてもよい

片手サイズのワイヤレスキーボードを買った

はじめに

片手サイズのキーボード、デスクにつかずにPCを使いたい時に便利そうで、気になっていた。
このカテゴリでメジャーな製品だとこの辺だと思う。

US配列が欲しい!

Amazonで探すとどれもご丁寧に日本語配列になってる…US配列そのままのが欲しいのに!

買ったやつ

これ

  • 買った時点では1160円
  • US配列
  • タッチパッド付き
  • USBドングルのワイヤレスでBluetoothでは無い
  • 330mAのバッテリー内蔵microUSBで充電するタイプ

使った感じ

f:id:kobar9568:20190826213630j:plain

打ち心地

打ち心地を求める製品では無いけど、打った感じは思ったより良かった。見た目的にゴムのフニャフニャの感覚を想像してたけど、クリック感があっていい感じ。

キー配列

Enter周りが変則的だけど、わりと素直なUS配列。
よく日本語環境で非日本語キーボードを使った時に問題になる半角/全角切り替えだが、私はCtrl+SpaceIMEの切り替えをしているのでここも問題なし。
Spaceの右のAltはAltGrキーになっててヨーロピアンな雰囲気が漂う。
あとマウスクリックのキーと、細々とした機能キーがついてるけどこれは試してない。

タッチパッド

狭いけど、必要十分な感じ。レイテンシとかも気にならない。
(Windowsでは)二本指でスクロールするが、これはマウスのホイールと同じで指を動かした方向にスクロールする。ラップトップによくあるSynapticsのタッチパッドとかとは逆。
ドライバ的にはタッチパッドとして読まれている訳ではなく、マウス扱いだと思う。
慣れれば問題無いけど、気になるならOS側でtweakすれば良さそう。

キーのバックライト

ここはおまけだろうからあんまり…
暗い場所でキーが見えるのは良いかも。LEDの数が少ないから綺麗って感じでは無い。
一応FN+F2で赤、緑、青、消灯を切り替えられる。

f:id:kobar9568:20190826213904j:plain

まとめ

流石にこれで長文打ったりコーディングしようとは思わないけど、寝転がりながらパソコンを使う時に良いかも。

ちょっとした画像切り出しにopencv-pythonが便利だった

はじめに

私はよく作業メモ等でWindows 10のスクリーンショット機能(Win + PrintScreen)を使うのだが、普段FHDの画面3つ+WQXGAの画面を横に並べているせいで、8320x1600のデカい画像が次々保存されていく。
中央のFHD部分だけを切り出したり、数十枚あるスクショから同じ部分を切り出したりする需要が結構あった。

画像編集ソフトとしてはPaint.NETを愛用しているのだが、手で切り出して保存するのがしんどかったので自動化を模索。

調べるとGIMPにはバッチ機能があるようだが、もっとシンプルに? OpenCV+Pythonを使うことにした。

OpenCV自体は画像解析やマシンラーニングも含むつよそうなライブラリだが、今回は単純に画像切り出しに使うことにする。

やりたいこと

f:id:kobar9568:20190714064858p:plain

FHDの画面を3つ横に並べた5760x1080のこのスクショから真ん中の写真を切り出して…

f:id:kobar9568:20190714064905p:plain

FHDの画像として保存する。

インストール

pip install opencv-python

pipで一発。簡単。

コード

基本的にcv2.imread()でNumPy配列として画像を読み込んで、切り出す範囲を選択して、cv2.imwrite()で選択した範囲を画像として書き出すだけ

#!/usr/bin/env python3

import cv2

# 切り出す範囲の左上と右下の座標を指定
crop_left_top = [1920, 0]
crop_right_bottom = [3839, 1079]

# 切り出し座標を調整
left = crop_left_top[0]
right = crop_right_bottom[0] + 1
top = crop_left_top[1]
bottom = crop_right_bottom[1] + 1

input_image = cv2.imread('in.png')
cropped_image = input_image[top : bottom, left : right]
cv2.imwrite('out.png', cropped_image)

画像編集ソフトで切り出したい範囲の左上と右下の座標を確認して、6-7行目に記述。
確認した座標をそのまま使えるように調整して範囲選択し、書き出す。

おわりに

あとは入出力周りを適当に作って今後はこれを使うことにする。
1枚2枚ならともかく、数十枚同じ範囲を切り出すのはかなり面倒で放置していたスクショが溜まっているのでこれを機に片付ける。
テストに使った写真は2年前くらいに瀬長島で撮ったやつ。第2滑走路が供用開始したらまた行きたいなぁ…

Thrustmaster Hotas XとRudder Pedalsをコネクタ化した

はじめに

専門じゃないけど低レイヤの作業
ThrustmasterのHotas XとRudder PedalsをFSX用に使っているが、どちらもケーブルが分離できない仕様になっており、取り回しが悪い。
そこで、ケーブルをぶった切って適当なコネクタを付けることで取り回しを改善することにした。

1. スティックとスラストレバーをコネクタ化

そのままだとスティックとスラストレバー間のケーブルがサイドスティックとして使うには短い。
この改造は去年に海外のフォーラムを見てやってみた。

使うコネクタ

スティックとスラストレバーを繋いでいるケーブルには16本の線が通っているので、20pinのHDMIコネクタや8pinのRJ-45を2つ、他には16pinのOBD2コネクタ(自動車のECUとの通信に使うらしい)等が候補に挙がる。
今回はスペースと手間を考えてHDMIコネクタのブレークアウトボードを使うことにした。 フォーラムに挙げられていたブレークアウトボードをAmazon.comで購入。
コネクタ2つと送料で25ドル前後だったので、割高な感じはある。 探せば国内で安く買えたかもしれない。
f:id:kobar9568:20190622211813p:plain

作業

意を決してケーブルを切断し、被覆を剥いてボードに繋いでいく。スティック側とスラスト側で計32本をストリップして繋ぐのはなかなか骨が折れた。
f:id:kobar9568:20190622210553p:plain
コネクタがオスなので、Intel Compute Stickのヘッドレス起動用にダミープラグと一緒に買っておいたHDMIメスメスのコネクタを介してHDMIケーブルで接続
f:id:kobar9568:20190622212252p:plain
ボードにカバーを付けて完成。椅子を挟んで左右に余裕を持って設置できるようになった。

2. スティックのUSBケーブルをMicro Bコネクタ化

先の改造でスティックとスラストは分離可能になったが、PCとの接続部分は外すことが出来ず、片付けたい時にPC側を外す必要がある。
PCがL字デスクの角にあることもあり、面倒なのでデバイス側が外れるようにしたかった。

USBのコネクタ化は以前USBキーボードのコネクタ化で経験があり、パーツも近所の100円ショップで入手できるので楽。
100円ショップのMicro B to Type-C変換ケーブルをバラしてMicro Bメスコネクタを使う
f:id:kobar9568:20190622212846p:plain
スティックをバラしてみるときちんとシールドが結線されていたが、変換ケーブルの方には無かったので未結線とした。恐らく問題なし。
これで一般的なMicro Bケーブルで接続できるようになった。
f:id:kobar9568:20190622212953p:plain

3. ラダーペダルのケーブルをRJ-25コネクタ化

ラダーペダルも片付ける際にケーブルが外せないのが気に入らなかったので、コネクタを付けることにした。
本体とUSBアダプタの間は6本の線が通っており、アダプタ側は6P6CのRJ-25コネクタになっている。
ただしこのRJ-25、ラッチが左側に寄っており、あまり見ないコネクタ形状をしている。
Mindstorms EV3のケーブルがこんな形だった気がする。(ラッチは右側だが)
レアなだけで普通の規格品なのか、独自のコネクタなのか気になる…

どのコネクタを使うかと、ジャックを実装する位置をケーブルの途中にするか、それともうまい具合に本体に入れるかで迷ったが、
結局ケーブルは今あるものを流用してUSB側はそのままに、ペダル側を切断して6P6Cのコネクタを付けることにした。
秋月電子に寄った時にいい感じのRJ-25ジャックとDIP化基板を見つけたので、これを使ってみることにした。

ケーブル作成は思い切ってかしめ工具を購入した。これでEthernetケーブルも作り放題! RJ-25は10個購入したが、多分今回使う1個以外はパーツケースの肥やしに…
去年の冬にEthernetケーブル作成講習を受けていたので、思い出しつつ作成。
まだカシメる感覚は怪しい。ラチェット無しの工具だとうまく作れない気がする。
f:id:kobar9568:20190622213958p:plain
ケーブルが完成。 RJ-45と比べてコネクタの全長が短い分、少し難しかった

f:id:kobar9568:20190622214246p:plain

ジャックの方はギリギリ本体に入りそうだったので、DIP化基板をそのまま実装。
父親に貰った古いこて先しか持っていないのと、スキル不足でかなりひどいハンダになってしまった。
もし本物の航空機のパーツだったらあっという間に墜落してNTSBが飛んできそうな品質。

f:id:kobar9568:20190622214734p:plain
一応完成したのでテストしてみる。問題なく動いてそうなのでOK。
電気的にRJ-25部分のホットスワップは考慮されていないようで、差し直すと変な値が送られてしまう。USB部分を抜き差ししてリセット必要があるようだ。