ラズパイでVSCode起動 with VNC

#はじめに
ラズパイでVSCodeが起動できずにハマったのでその過程と解決策を記載します。

#環境
対象機器：
　H/W：Raspberry Pi3 ModelB+
　OS ：Raspbian Release 9.9
　VNC環境：TightVNC
　ターミナル：Terminator

ホストマシン：
　H/W：自作PC(ちょっと古いAMD CPU、DDR3 16GBな感じ)
　OS ：Windows7 64bit
　VNC環境：TigerVNC Viewer 1.9.0
　ターミナル：TeraTerm

#ハマった流れと発現した事象
まず、ラズパイに色々線が繋がっていると鬱陶しいので、基本的にVNCのデスクトップ環境とTeratermを使ったCUI環境で開発をします。
大好きなエディタはvimです、がコードを書くツールとしては限界を感じたため、現代的なコードエディタであるVSCodeを入れようと考えました。

##VSCodeのインストール
以下のサイトを参考にしてインストールしました。
１.[改訂【 インストール編 】Raspberry PiでのプログラミングもエディターはVisual Studio Code！](https://www.fabshop.jp/%E6%94%B9%E8%A8%82%E3%80%90-%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E7%B7%A8-%E3%80%91raspberry-pi%E3%81%A7%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/)
２.[ラズベリーパイで Visual Studio Code を使う](http://dotnsf.blog.jp/archives/1073495828.html)

最初はtcshでスクリプトを実行しようとしてはじかれ、bashに切り替えることに気づくのに小一時間。。。初歩的なところでひっかかってました。

##事象発現
インストール後、以下の方法で実行したのですが、VSCodeは起動しません。しかもウィンドウすら表示されませんでした。
　実行方法
　　・ターミナルでcode-oss
　　・メニュー->プログラミング->CodeｰOSS(headMelted)

参考にしたサイトなんかでは画面くらいはでてるんだけどなーとか思いつつ先駆者の情報をググります。

##ダウングレード
調べてみると、インストールされた1.32.0はバグがあり、ラズパイで使うにはダウングレードの必要があることが判明しました。
そのため、以下を参考に1.29.0にダウングレードを実行しました。
https://qiita.com/sh00t/items/af46724fabadef4fcfd0

##見事にハマる
ダウングレード後に再度実行してみたところ、やはり起動しません。
そもそも画面が真っ黒な状態で起動されている記事はあってもウィンドウすら起動しない話はどこにも載っていなかったので、イヤな予感はしていたのですが。
何度もインストールをやり直してみたり、rebootしてみたりしたが一向に改善しませんでした。

#解決
何か情報を得ようと、code-oss --helpでオプションを探ります。
すると、code-ossのhelpで-sをつけるとstatusが表示されることが判明したので実行したところ、以下の内容が表示されました。

```:コマンド
$ code-oss -s
```

```:返ってきたステータス
Xlib:  extension "XInputExtension" missing on display ":1.0".
Xlib:  extension "RANDR" missing on display ":1.0".
Xlib:  extension "XInputExtension" missing on display ":1.0".
[1476:0711/010055.451550:ERROR:gl_surface_glx.cc(408)] glxQueryVersion failed
[1476:0711/010055.452604:ERROR:gl_initializer_x11.cc(153)] GLSurfaceGLX::InitializeOneOff failed.
[1476:0711/010055.459749:ERROR:gpu_child_thread.cc(252)] Exiting GPU process due to errors during initialization
[1440:0711/010055.476182:ERROR:browser_gpu_channel_host_factory.cc(103)] Failed to launch GPU process.
[main 1:00:56] Warning: The --status argument can only be used if Code is already running. Please run it again after Code has started.
```

下から2行目にGPUって書いてあります。
色々参照していた中で、GPUにかかわる部分でエラーが出ることがあるということは知っていたため、以下のコマンドを試してみました。

```:コマンド
$ code-oss -s --disable-gpu
```

```:返ってきたステータス
Xlib:  extension "XInputExtension" missing on display ":1.0".
Xlib:  extension "RANDR" missing on display ":1.0".
[main 1:01:43] Warning: The --status argument can only be used if Code is already running. Please run it again after Code has started.
```

おっと原因の一部が判明しました。やはりGPUでした。
そしてdisableで解決できないやつらがまだ残っています。おまわりさん、悪いのはこいつらです！
ここまでくればもう簡単。XInputExtension missing on displayとかでググります。
そして、以下のサイトを見つけました。
[Ubuntuで同じようにハマった人の質問](https://github.com/microsoft/vscode/issues/3451)

英語ですが読み進めていくと、最後から２,３個目くらいの投稿に”これで解決したよ！ありがとう！”という記載があります！**そうです、私もそれを求めていたんです！**

細かいことはリンク元に任せますが、リンク元に合ったのはx86系のCPUに乗ったLinux用だったので、これをラズパイ用に書き換えたコマンドが以下になります。


```
sudo sed -i 's/BIG-REQUESTS/_IG-REQUESTS/' /usr/lib/arm-linux-gnueabihf/libxcb.so.1
```

そして、このコマンドはどうやらVNCに関わる環境に効くっぽいので、ここでようやく、VNC環境が悪さをしていることに気づきました。
念のため、VNCではなく、HDMIでディスプレイに直でつないでCode-OSSを起動してみると、普通に起動します。これで原因はVNC環境にあることが確定です。

ということで、原因と解決方法が分かったので、上記のコマンドをさくっと実行してVSCodeの起動を試みます。

**無事、起動しました**

#最後に
諦めずに原因究明してかなり勉強になりました。

Qiita初投稿なので、読みにくかったごめんなさい。