scrcpyでAndroidの画面をミラーリング

はじめに

AndroidでWindowsPCにミラーリングしようとすると、有料だったり、画質が悪かったり、地味にスペックを要求されてしまう(ある程度は仕方がないが。)アプリが多い。 ゲーム配信などには、画質や描画速度もほしいところ。

今まで試したもの↓

  • LetsView: 完全無料で設定も融通が効いて魅力MAXだが、私の環境ではいつのまにか数分でエラー落ちとなっている
  • ApowerMirror: 画質と軽さの面で申し分ないが、無料版では10分で配信が勝手に停止されるようになっている
  • Android画面録画究極: この中では最も安定していた。名前が胡散臭い…ユーザ登録で機能開放される部分が多く、毎回有料版を勧めてくる。
  • AirMore: 画質が満足いかなかった

ええ、、、ApowerS○ftだけで何個アプリ作るんだよ。。(´ 'д' ` )という実態。

今回、無料でミラーリングすることができるというscrcpyというパッケージを使ってミラーリングを試行した。 私以外にも記事は結構あるので成功の一例として捉えてもらえば。。

注意点としてAndroid端末は追加ソフトが不要だが、開発オプションのUSBデバッグモードをONにする必要あり。 あと筆者はなぜかWSL2上でscrcpyを実行しているが、普通にWindows用のscrcpy.exeをダウンロードして準備すればもっと簡単らしいゾ。


手順参考


スペックとか

種類 バージョン名など
Android端末 SO-01M (Xperia5)
Windows windows10 19041.928
Ubuntu 20.04 LTS

手順

1.インストール

wsl2が有効になったwindows上で手順を進めていく。

powershellで下記を実行してwsl2上でubuntuを起動。 wsl2の導入方法は申し訳ないが省かせていただく。

> wsl

既存パッケージ更新、scrcpyをインストール

$ apt update
$ apt install scrcpy

なお、既存パッケージ更新が済んでいない状態ではapt installがエラー落ちする状況となった。

有線でポートを開いたあと、無線でつなぐ際はWindows側でadbのTCP/IP接続準備が必要となる様子。 Windowsターミナルでadbコマンドが使えるようにSDK platform-toolsを任意の場所に配置してパスを通しておくこと。

Windows:

※なお、下記実行前にAndroid端末をUSB接続しておくこと

$adb tcpip 5555 
WSL2:
$adb connect [ip device]:5555 

※USBを外したあとに adb devicesに名前がでない場合は、一旦接続を停止して再度adb connectを実行

接続後に役立つコマンド

# 接続デバイス表示 
adb devices
# 停止させるとき 
adb kill-server 

2.ミラーリング・・・??

ひとまずscrcpyを実行するだけで良い。

scrcpy -m 1280 --max-fps 30

また、-mを指定しない場合はちょうどいい感じにしてくれる。

、、、と、うまくいけばいいのだが、できてないのではないだろうか。。 できた人は別件でWSL2でGUI環境が使えるように頑張っていたに違いない。。


3.ミラーリング時のエラー対応

$ No matching fbConfigs or visuals found
$ failed to load driver: swrast

WSL2にはGUI環境がないのでそのような場合はホストのWindows10にX Serverと呼ばれるGUI実行環境があると良いらしい。 無料で使えるVcxSrvというものがあるのでそれを使った。

sourceforge.net

エラー対応参考

odaryo.hatenablog.com github.com

試したこと

ifconfigでホストwindowsのip情報を取得しておいてDISPLAY変数を設定

export DISPLAY="192.168.x.x:0.0"

※ここで設定するipはWSL2から確認できる172.x.x.xではだめだった

WLS2上から下記のようなコマンドでWindows上で動作中のxserverのアプリが起動できることを確認

xeyes
xcalc

なお、VcrSrv起動時は下記の選択が良さげ。 私のxperiaでは下記の設定に変えてVcrSrvを再起動した時点でミラーリングできるようになった。 - multiplewindows選択 - start no client選択 - ExtraSetting - disable access controllのみチェック

またPCとAndroid端末をUSB接続したままではなぜかadb devicesがunauthorizedでしか表示されなかったので、USB接続解除後にadb connectしたところ deviceとして認識されるようになったので良かった。

ここまでやって手順2を再度実行していたったら映った!

scrcpy -m 1280 --max-fps 30

あとはscrcpyコマンドオプションで画質や画面サイズなど多少の調整は効くので、 scrcpy -h コマンドでヘルプを出して調整してみよう。


最後に

scrcpyは遅延も少なく画質も結構いいのでいい感じ。

今回の方法では有線接続ではできなかったしエラーも頻出した。このあたりはWindows用のscrcpyを普通に準備すれば簡単にできたはず。 一般的なソフトが使えるならそれに慣れることに越したことはない。Iphoneなら別のアプリも選択肢にあがるので、自分なりに満足いく方法を見つけてほしい。

Markdown on VScode

個人的に見かけることが多くなってきたのでMarkdownの使い方を軽く説明します。

VSCodeを使うので予め入れておきましょう。
サクラエディタなどの単なるテキストエディタよりはさすがに重いですが、他のIDEと比較して動作が軽いイメージです。

安心(?)のMicrosoft製!
https://azure.microsoft.com/ja-jp/products/visual-studio-code/

書き始めよう!

VSCodeを開いたら拡張機能で下記をインストール!

これで下記のmd拡張子のファイルがマークダウン文書として編集できるようになる。

******.md

プレビュー付き、目次(Table of Contents)作成機能付き。

Ctrl + Shift + v  # プレビュー
Ctrl + Shift + P → 「Create Table Of Contents」実行 # 目次作成

f:id:clover_hate:20200226180310p:plain
プレビュー

見た目はちょっと微妙だけど、見出しやリンクなどが変換されてます。

あとはmdファイルを作成してVSCodeで書いていくだけ!簡単!

Markdownの記法は?

マークダウンの記法は基本的なものからhtmlタグを展開してくれるものなど多いので割愛。
チートシートをまとめてくれているので参照のこと。 (https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet

エディタのプラグインやブログサイトによっては非対応の記法があるが、
下記はどこでも使えるイメージ。何が対応してるかはプレビュー機能やHTML出力機能を使って確かめよう。

  • 箇条書き - or *
  • 見出し #
  • 水平線 ---
  • リンク
  • コードブロック ```
    • ```rubyなど言語指定したときのコードハイライト機能まではサポートされてない場合も多い
  • 引用 >
  • テーブル

テーブルを恐れるな!

後は基本的には慣れだが、Markdownの面倒な部分としてテーブル作成がある。
表を作成する際は|や:---:を大量に使って体裁を整えねば編集も難しい。

そこで下記を導入してみる。

Excelを始めとする表計算ソフトのセルコピーをすると マークダウンのテーブル記法に変換貼り付けしてくれる。良い!

コピペ動作確認ができたソフト

- Microsoft Excel
- Google Spread Sheet

Evernoteの表はコピペできませんでした)

テーブル作成手順

  1. 表計算ソフトでセルを範囲選択してコピー。
  2. VSCodeMarkdown文書で下記を実行
Shift + Alt + v
### Ctrl+v (普通に貼り付け)
ヘッダ1    ヘッダ2  ヘッダ3
あ い う
1   2   3
a   b   c

### Shift+Alt+v  (Excel to Markdown table使用)
| ヘッダ1 | ヘッダ2 | ヘッダ3 |
|------|------|------|
| あ    | い    | う    |
| 1    | 2    | 3    |
| a    | b    | c    |

テーブルを簡単にコピペ作成できた!

まとめ

Markdownを使えばただのメモからスタイル付きの文書を作成できます。 ただのテキストメモとしてまとめるより、Markdownで書いた方が見やすい文書を作成できるので、
普段のメモ使いにもおすすめです。

WEBサービスによっては ## や - の後にスペースを打つと勝手に見出しや箇条書きに変換してくれるものもあるため、
覚えとくとノート系サービス使う際にも役立つ、かも。

.mdを書いてmarkdown記法を布教しよう。

【Windows10】Ansible動作確認用にssh接続可能なコンテナを建てたい

 ## やりたかったこと 業務でAnsibleを使うようになったため、connection: locallocalhost向きにplaybookを実行することで、実行役と検証を1つの仮想ホスト内でやっていたが、環境変数読み込み等が原因でいざリモート作業環境にplaybookを移行した時にエラーが大量に出ていた。

HyperVが使えるWindows10PCが手に入ったので、Docker for WindowsでAnsible実行用コンテナ、作業対象のSSH接続先コンテナの2つを作り、疑似リモートAnsible構築検証をしたい。

参考サイト様

サーバサイド知識、Docker知識が底辺レベルのためとても助かりました。 というか、CentOSのバージョン以外、ほぼ丸パクリになってしまい申し訳ありません。。

構成(雑)

Dockerコンテナ構成はこんな感じ。

Windows10 Docker for Windows (HyperV)
├ansibleコンテナ (ubuntu) 
└targetコンテナ (centos7) 

※HyperVの有効化やDocker for Windowsの起動確認は予め確認すべし。

複数コンテナはdocker-compose.ymlを使うのが楽って聞いた!
servicesの直下に書いたサービス名をホスト名として使えて、docker-composeで構築したコンテナ内部ではDockerコンテナのIP(172.xxx.xxx.xxx)を指定しなくても良いらしい!
どうなってるのかよくわからんが、動くからヨシ!

 ## やったこと

ディレクトリパス

任意のディレクトリ
├docker-compose.yml *1
├ansible/
│ ├Dockerfile *2
│ └playbooks
│    ├extra-vars.yml *3
│    ├hosts *4
│    └test/
│       └playbook.yml *5
└target/
   └Dockerfile *6

6個もファイルがが・・


各ファイルの記述内容

先程のファイル群の内容を記述します。

docker-comopose.yml *1

version: '3'
services:
    ansible:
        build: ./ansible
        image: check_ansible
        volumes:
            - ./ansible/playbooks:/playbooks            
    target:
        build: ./target
        image: check_target
  • buildでDockerfileのディレクトリを記述した。
  • imageで docker-compose build で作成されるイメージ名を記述した。
  • volumesでホストの ansible/playbooks を ansibleコンテナ /playbooks にマウントした。

ansible/Dockerfile *2

FROM ubuntu

WORKDIR /playbooks

# ansible client install
RUN apt update && \
    apt install -y software-properties-common && \
    apt-add-repository ppa:ansible/ansible && \
    apt update && \
    apt install -y ansible
  • 参考サイトよりubuntuにansibleをインストールするansibleコンテナのビルド設定を記述
  • ディレクトリ構成の都合でWORKDIRを/playbooksに指定

ansible/playbooks/extra-vars.yml *3

playbookで使いたい変数値を好きに書いておきましょう。後でplaybook実行時に読み込ませてみます。

# 実行時に変数値記述ファイルとして読み込ませます

ansible/playbooks/hosts *4

ホスト情報を記載します。通常はIPやdomainを記述するところだが、 最初に記述したとおり、docker-compose.ymlで指定したservice名で記述できる。

[web]
target

ansible/playbooks/test/playbook.yml *5

実際に実行するplaybookです。 内容を書き換えて色々なmoduleを記述してみましょう。 配置パスは自分がわかる場所であれば適時変更して構いません。

- hosts: target
  tasks:
  - name: Install Vim
    yum: name=vim
  • vimをインストールする記述

target/Dockerfile *6

FROM centos:7

RUN yum -y install openssh-server
RUN ssh-keygen -A
RUN sed -ri 's/^#PermitEmptyPasswords no/PermitEmptyPasswords yes/' /etc/ssh/sshd_config
RUN echo "root:" | chpasswd

EXPOSE 22

CMD ["/usr/sbin/sshd", "-D"]
  • 参考サイトよりansibleコンテナからssh接続可能なtargetコンテナビルド設定を記述
  • イメージにcentos:7を指定

playbook実行手順

targetが起動していないといけないので、コンテナ起動→ansibleコンテナ内でbash起動→playbook実行という流れになります。

  • コンテナ起動&bash起動
docker-compose up -d
docker-compose run ansible bash
  • playbook実行
cd /playbooks
ansible-playbook test/playbook.yml -e @/playbooks/extra-vars.yml -i /playbooks/hosts
  • ansible-playbookコマンドで作成済みのplaybook.ymlファイルを実行できる。
    • -eで@付きのファイルパスを書くと変数ファイルを読み込んでくれる。
    • -iでインベントリファイルを読み込んでくれる。

できなかったこと

本来動作確認したかったplaybookを丸々testディレクトリに配置して、ansible-playbook実行してみたがエラーが解消できなかった。
ミドルウェアとかが不足していたんだろうけど。。 (本番では成功したので助かった。)

複雑なことを検証しようとすると設定が全然足りないっぽいですが module数個単位での動作確認では使えたのでとりあえず良いということにします!

開設のあいさつ

はじめに

開設してみたものの書くこともなく、 しばらく放置してしまうかもしれませんが、 目に留まってしまった方はどうぞよろしくお願いします。

SPEC

ど田舎で仕事しているSEです。その内SEじゃなくなるかもしれない。

  • 趣味:

    • インドア系 - ドラマ、映画、漫画、アニメ、TVゲームなど
    • アウトドア系? - 自転車←New
  • ここに書くこと: ジャンル問わず書くかもしれない。