mac OS X 10.11.5で自動的にログアウトしてしまう時の対応


## 最初
macを操作していると、突然ログアウトし、ログイン画面が表示される。
1度目が起き、再起動したあとも、再発したので調べる。

## 起こったこと
ログアウトしたあとにターミナルを見ると以下のようなメッセージ。

```
emacs Set a breakpoint at CGSLogError to catch errors as they are logged.
Failed to look up the port for "com.apple.windowserver.active"
On-demand launch of the Window Server is allowed for root user only.
$ whoami
501
```

WindowServerでエラーが起こっているようで、強制的にログアウトが発生してしまっていた。しかも501ユーザーになってる。
ちなみにWindowServerが何をやっているかは知らない。

ここから先は、時系列で行ったことを記載していく。

## クラッシュログを確認
まずはクラッシュログを探す。/var/log/以下になさそうなので、力づくで見つける。

```
$ sudo find / -name "*[Ww]indow[Ss]erver*"
/Library/Preferences/com.apple.windowserver.plist

...<中略>...

/Library/Logs/DiagnosticReports/WindowServer_2016-06-09-100956_taMBPro.crash
/Library/Logs/DiagnosticReports/WindowServer_2016-06-09-103024_taMBPro.crash
```

なんかそれっぽいのが見つかる。

```
$ less /Library/Logs/DiagnosticReports/WindowServer_2016-06-09-103024_taMBPro.crash

Process:               WindowServer [211]
Path:                  /System/Library/Frameworks/CoreGraphics.framework/Versions/A/Resources/WindowServer
Identifier:            WindowServer
Version:               1
Code Type:             X86-64 (Native)
Parent Process:        launchd [1]
Responsible:           WindowServer [211]
User ID:               88

Date/Time:             2016-06-09 10:09:49.757 +0900
OS Version:            Mac OS X 10.11.5 (15F34)
Report Version:        11

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.CoreGraphics              0x00007fff8dd10e97 CGXRunOneServicesPass + 1038
1   com.apple.CoreGraphics              0x00007fff8dd12fee CGXServer + 7433
2   WindowServer                        0x000000010d341f7e 0x10d341000 + 3966
3   libdyld.dylib                       0x00007fff817ae5ad start + 1

Thread 1:: Dispatch queue: com.apple.libdispatch-manager
0   libsystem_kernel.dylib              0x00007fff94bc0efa kevent_qos + 10
1   libdispatch.dylib                   0x00007fff8b7b4165 _dispatch_mgr_invoke + 216
2   libdispatch.dylib                   0x00007fff8b7b3dcd _dispatch_mgr_thread + 52

Thread 2:: com.apple.CoreAnimation.render-server
0   libsystem_kernel.dylib              0x00007fff94bb9345 mach_absolute_time + 18
1   com.apple.QuartzCore                0x00007fff915a78f0 CACurrentMediaTime + 9
...
```

利用したアプリケーションなどのログはなく、利用したプロセスが分かるだけなので途方に暮れる。

クラッシュログから検討をつける方法は諦める。

## WindowServerを利用しているアプリケーションを探す

```
$ grep -irn "windowserver" /Applications

Binary file /Applications/Atom.app/Contents/Frameworks/Electron Framework.framework/Electron Framework matches
... <中略> ...

Binary file /Applications/duet.app/Contents/MacOS/duet matches

Binary file /Applications/FirefoxDeveloperEdition.app/Contents/MacOS/plugin-container.app/Contents/MacOS/plugin-container matches

Binary file /Applications/FirefoxDeveloperEdition.app/Contents/MacOS/XUL matches
```

## 起動していたアプリケーションから当たりをつける
そのとき起動していたDuetとが怪しい！ ということで検索

http://help.duetdisplay.com/faq/124748-duet-was-running-and-i-got-logged-out-of-my-mac

それっぽいのが見つかる。

## 結果
DuetでMission Controllを利用するとなることがあるらしい。
昨日までは問題なく利用できていて、特にアップデートもしていなかったので、全く想定外でした。
そう言われれば、クラッシュしたとき、そんな挙動してた気がするわー。

あとはサイトに記載してあるとおり、アニメーションを表示しないよう、コマンドを実行。

```
$ defaults write com.apple.dock expose-animation-duration -float 0
$ killall Dock
```

これで再発しなくなったので、一旦OK。
最後までWindowServerが何をしているか知らないまま。