読者です 読者をやめる 読者になる 読者になる

Androidスマートフォンのディスプレイが映らなくなったときの悪あがき

東京への遠征中にスマートフォンASUS Zenfone 2 Laser)のディスプレイが突然映らなくなってしまいました。「USBケーブルを接続するとバイブレーションが動く」「カメラを起動してから画面をタッチするとフォーカスを合わせる音がする」といった状況から,ディスプレイにのみ異常が発生しており,OS周りには異常はなく,タッチスクリーンも生きていると推測しました。

スマートフォン全体が完全に動作しなくなってしまったのであればデータの救出も諦めるしかありませんが,ディスプレイ以外は正常に動作しているようなのですからできる限りのことはやっておきたいものです。この記事では同じような状況に陥ってしまった人のための最後の悪あがきを紹介します。

スマートフォンがMHLに対応しているとき

MHLケーブルはスマートフォンのUSB microBに接続することでディスプレイの表示をHDMIに出力するケーブルです。スマートフォンがMHLに対応しているならば最も確実な方法だと思います。

ELECOM MHL変換ケーブル 3m ブラック MPA-MHLHD30BK

ELECOM MHL変換ケーブル 3m ブラック MPA-MHLHD30BK

この方法の弱点としては低〜中価格帯のスマートフォンはMHLに対応していないものが多いということが挙げられます。私が使用していたASUS Zenfone 2 Laserがまさにこのタイプで,この方法は使えませんでした。

スマートフォンがMHLに対応していないとき

この場合は何とかしてPCに画面を転送することを目標にします。私が使ったのはVysorというChromeアプリで,マルチプラットフォームに対応しています。

chrome.google.com

このアプリを使うためにはAndroidのUSBデバッグを有効にする必要があります。ディスプレイが映らない状況ではUSBデバッグを有効にすることがそもそも難しいのですが,ここではUSB経由でスクリーンショットを転送するという方針を取りました。私の場合は幸運にも,スマートフォンのパスコードの入力さえしてしまえばAndroid File Transferを使うことでUSB経由でスクリーンショットが保存してあるディレクトリを覗くことができました。スクリーンショットで現在の画面の状態を確認することができればUSBデバッグを有効にする画面まで移動することはそれほど難しくありません。あとは前述のアプリを使えばPCに画面を転送することができるだけでなく,PCからスマートフォンを操作できます。

/usr/bin/xauth: timeout in locking authority file .Xauthority

研究室の計算サーバでX転送を使おうとして ssh -X hoge としてログインしようとすると,なぜかログインに数十秒の時間がかかり,その後タイトルのメッセージが表示されました。

最初はパーミッションあたりに問題があるのかなと思って試行錯誤してみたのですが改善しませんでした。ググってみても,関係がありそうな情報があまり見つからなかったのですが,以下の日記にSELinuxとの関連を示唆する情報が載っていました。

srad.jp

普段はDebian系のLinuxを使っていてSELinuxとは縁が無いので,これにはなかなかびっくりしました。SELinuxではそれぞれのファイルにSELinuxコンテキストというタグのようなものが設定されているらしく,何かの拍子で誤った設定が行われてしまった可能性があります。以下のページによれば,restorecon というコマンドを使うことでポリシーに適合するようにSELinuxコンテキストを修正してくれるようです。

そういうわけで restorecon -Rv $HOME とすることで問題が解決できました。差分を見た感じでは $HOMEunconfined_u:object_r:home_root_t:s0 ではなくunconfined_u:object_r:user_home_dir_t:s0 という設定にされるべきだったようです。

Go言語のデバッガをMacのIntelliJ IDEA CEで使う

  • IntelliJ IDEAのGo言語プラグインをインストールするとdelveというデバッガもインストールされます
  • デバッガのように他のプログラムにアクセスするプログラムは安全なものではないため,delveを実行する際にパスワードの入力を求められます
  • 証明書を作ってデバッガに登録しておくことでパスワードの入力を省略することができます
  • ただし,IntelliJ IDEAのGo言語プラグインを普通にインストールするだけでは証明書が登録されていません
  • brew install go-delve/delve/delve でdelveをインストールすると証明書の作成から登録まで自動でやってくれる(ただしインストール時にパスワードの入力を求められる)ので,IntelliJ IDEAのGo言語プラグイン用のdelveをbrewでインストールしたdelveに置き換えると簡単です
  • Go言語プラグイン用のdelveの配置場所は ~/Library/Application\ Support/IdeaIC2016.3/Go/lib/dlv/mac です
  • デバッガを起動する際は Run → Debug... の次に "Build main.go and run" を選ぶ必要があります。"go run main.go" を選んでしまうとデバッガが起動しません
  • brew info delve で確認できますが,brew経由でインストールしたdelveをアンインストールするときには dlv-cert という証明書を削除しておきましょう

参考

ascii.jp

qiita.com

www.indetail.co.jp

みんなのGo言語[現場で使える実践テクニック]

みんなのGo言語[現場で使える実践テクニック]