GDPMicroPCでChrome Remote Desktopをつなぐ


GDPMicroPCは電車内で利用できて好き。
でも開発しにくいから自宅ではChrome Remote Desktopでアクセスできるようにしたいよねって話。


### 詰まる原因は２点
- 公式で配布されているubuntu mateはLXDE系
  - →仮想のディスプレイポートが貼れなくて、表示されている画面を共有するようにスクリプトの修正が必要
- 本来縦長のディスプレイを利用しているせいで縦横が逆で表示される
  - デフォルトでxrandr -o rightを掛けなければいけない


#### その１
- 表示されている画面を共有するようにスクリプトの修正をしたい
  - この記事、https://qiita.com/k_ikasumipowder/items/c173fb92cf12c75b2375 が詳しい
    - mate用の.chrome-remote-desktop-sessionの設定はこれ

```bash
cat <<EOF >$HOME/.chrome-remote-desktop-session
DESKTOP_SESSION=mate XDG_CURRENT_DESKTOP=MATE XDG_RUNTIME_DIR=/run/user/$(id -u) exec /usr/sbin/lightdm-session mate-session
EOF
```


#### その２

- xrandr -o rightの指定はどこかでする必要がある
  - 仮想のxorgの初期設定  ←  コメントアウト済み
  - 一番最初のxrandr  ←  コメントアウト済み
  - リサイズ時に走るxrandr  ←  これを修正する
  - Chrome Remote Desktopで接続後にコンソールを叩く
     - 一応 xrandr --output DSI1 --mode 720x1280 -o right って叩くと直る


##### /opt/google/chrome-remote-desktop/chrome-remote-desktop のリサイズ監視部分はここ
```python
def watch_for_resolution_changes(initial_size):
 for _ in range(30):
    time.sleep(1)
    xrandr_output = subprocess.Popen(["xrandr"],
                                     stdout=subprocess.PIPE).communicate()[0]
    matches = re.search(r'current (\d+) x (\d+), maximum (\d+) x (\d+)',
                        xrandr_output)


    if current_size != initial_size:
      if current_size == maximum_size:
        label = "%dx%d" % initial_size
        args = ["xrandr", "-s", label]
        subprocess.call(args)
        args = ["xrandr", "--dpi", "96"]
        subprocess.call(args)
        args = ["xrandr", "-o", "right"] # 追記
        subprocess.call(args) # 追記
```


#### 余談
- GDPMicroPCのデフォルト解像度は以下の種類である。
  - 720x1280,640x480,720x405,360x640,640x360
  - 増やしたいときは多分 xrandr --addmode DSI1 ... とか使う
    - 本来、Chrome Remote Desktopにも自動で解像度を増やしてくれる環境変数オプションはある。
      - CHROME_REMOTE_DESKTOP_DEFAULT_DESKTOP_SIZES
      - CHROME_REMOTE_DESKTOP_USE_XORG
          - でも、この辺の変数はスクリプトの修正をした時点でコメントアウトされた関数なので、今回は特に意味がなかったりする
- 若干、リサイズ時の縦横比が気になるけど直せなかったので放置した。
- /opt/google/chrome-remote-desktop/chrome-remote-desktop は更新されるときにたまに修正内容が吹き飛ぶのでバックアップはしよう
- sytemctlでChrome Remote Desktopを明示的に扱える
  - sudo systemctl start chrome-remote-desktop.service
    - 実体は /etc/init.d/chrome-remote-desktop にあって /opt/google/chrome-remote-desktop/chrome-remote-desktop を叩くsh
      - /opt/google/chrome-remote-desktop/chrome-remote-desktop --start 的なことをしている
- GDPMicroPCのxorgの初期設定は/usr/share/X11/xorg.conf.d/40-gpd-micropc-monitor.confに書かれてる
  - xrandrで叩いたときのoutputラベル名として、ここで設定されたDSI1とか、DSI-1とかの名前があることがわかって嬉しいね！！
  - ので、gnome系とかで仮想のxorgの初期設定が効く人は、/opt/google/chrome-remote-desktop/chrome-remote-desktopのSection "Monitor" に Option "Rotate"  "right"って書くだけで行ける可能性はあるかも


```text
# GPD MicroPC (modesetting)
Section "Monitor"
  Identifier "DSI-1"
  Option     "Rotate"  "right"
EndSection


# GPD MicroPC (xorg-video-intel)
Section "Monitor"
  Identifier "DSI1"
  Option     "Rotate"  "right"
EndSection
```


#### 参考；
http://kapper1224.sblo.jp/article/186180635.html
https://wiki.archlinux.jp/index.php/Xrandr
https://webnetforce.net/ubuntu-chrome-remote-trouble/
https://qiita.com/hiro_mayo/items/db8ddcea600e8bfbdd5f
https://qiita.com/k_ikasumipowder/items/c173fb92cf12c75b2375