2015年1月17日土曜日

[cygwin] アップデートで起動しなくなったCygwin-X(1.7.33)の問題の解決方法

windows7にインストールしているcygwinを最新(1.7.33)に更新したところCygwin-Xが起動しなくなってしまいました。ログを確認しネット上の情報を参考に試行錯誤したところ、正常に起動できる状態に復旧することができたので、その内容をまとめておきます。

問題の症状

  • Cygwin-XでXを起動すると、一瞬XWin.exeが起動されるが、すぐに終了してしまう。
  • ログ(/var/log/xwin/XWin.0.log)は以下のようになっており、"winClipboardProc - winClipboardFlushWindowsMessageQueue trapped WM_QUIT message, exiting main loop."というメッセージの出力の通り、WM_QUITメッセージによりメインループを抜けてしまっている。
  • Welcome to the XWin X Server
    Vendor: The Cygwin/X Project
    Release: 1.16.3.0
    OS: CYGWIN_NT-6.1 hostname 1.7.33-2(0.280/5/3) 2014-11-13 15:47 x86_64
    OS: Windows 7 Service Pack 1 [Windows NT 6.1 build 7601] (Win64)
    Package: version 1.16.3-1 built 2014-12-30
    
    XWin was started with the following command line:
    
    /usr/bin/XWin :0 -multiwindow -nolisten tcp -auth 
     /cygdrive/c/Users/username/.serverauth.7540 
    
    ddxProcessArgument - Initializing default screens
    winInitializeScreenDefaults - primary monitor w 1920 h 1200
    winInitializeScreenDefaults - native DPI x 96 y 96
    [   403.995] (II) xorg.conf is not supported
    [   403.995] (II) See http://x.cygwin.com/docs/faq/cygwin-x-faq.html for more information
    [   403.995] LoadPreferences: /cygdrive/c/Users/0000119109/.XWinrc not found
    [   403.995] LoadPreferences: Loading /etc/X11/system.XWinrc
    [   403.995] LoadPreferences: Done parsing the configuration file...
    [   403.995] winDetectSupportedEngines - DirectDraw4 installed, allowing ShadowDDNL
    [   403.995] winDetectSupportedEngines - Returning, supported engines 00000015
    [   403.995] winSetEngine - Multi Window or Rootless => ShadowGDI
    [   403.995] winScreenInit - Using Windows display depth of 32 bits per pixel
    [   404.011] winAllocateFBShadowGDI - Creating DIB with width: 1920 height: 1200 depth: 32
    [   404.011] winFinishScreenInitFB - Masks: 00ff0000 0000ff00 000000ff
    [   404.011] winInitVisualsShadowGDI - Masks 00ff0000 0000ff00 000000ff BPRGB 8 d 24 bpp 32
    [   404.011] MIT-SHM extension disabled due to lack of kernel support
    [   404.026] XFree86-Bigfont extension local-client optimization disabled due to lack of shared memory support in the kernel
    [   404.026] glWinSelectGLimplementation: Loaded 'cygnativeGLthunk.dll'
    [   404.026] (II) AIGLX: Testing pixelFormatIndex 1
    [   404.136] GL_VERSION:     3.3.0 - Build 8.15.10.2712
    [   404.136] GL_VENDOR:      Intel
    [   404.136] GL_RENDERER:    Intel(R) HD Graphics 4000
    [   404.136] (II) AIGLX: enabled GLX_SGI_make_current_read
    [   404.136] (II) AIGLX: enabled GLX_MESA_copy_sub_buffer
    [   404.136] (II) AIGLX: enabled GLX_SGI_swap_control and GLX_MESA_swap_control
    [   404.136] (II) AIGLX: enabled GLX_SGIX_pbuffer
    [   404.136] (II) AIGLX: enabled GLX_ARB_multisample and GLX_SGIS_multisample
    [   404.136] (II) 66 pixel formats reported by wglGetPixelFormatAttribivARB
    [   404.136] (II) AIGLX: Set GLX version to 1.4
    [   404.136] (II) 21 fbConfigs
    [   404.136] (II) ignored pixel formats: 0 not OpenGL, 6 RBGA float, 3 RGBA unsigned float, 0 unknown pixel type, 36 unaccelerated
    [   404.136] (II) GLX: Initialized Win32 native WGL GL provider for screen 0
    [   404.229] winPointerWarpCursor - Discarding first warp: 960 600
    [   404.229] (--) 5 mouse buttons found
    [   404.229] (--) Setting autorepeat to delay=500, rate=31
    [   404.791] (II) Loading US keyboard layout.
    [   404.791] (--) Windows keyboard layout: "E0210411" (00000411) "ATOK 2012", type 7
    [   404.791] (--) Found matching XKB configuration "Japanese"
    [   404.791] (--) Model = "jp106" Layout = "jp" Variant = "none" Options = "none"
    [   404.791] Rules = "base" Model = "jp106" Layout = "jp" Variant = "none" Options = "none"
    [   404.853] winInitMultiWindowWM - DISPLAY=:0.0
    [   404.853] winMultiWindowXMsgProc - DISPLAY=:0.0
    [   404.884] winProcEstablishConnection - winInitClipboard returned.
    [   404.884] winInitMultiWindowWM - XOpenDisplay () returned and successfully opened the display.
    [   404.884] winClipboardThreadProc - DISPLAY=:0.0
    [   404.884] OS maintains clipboard viewer chain: yes
    [   404.884] winMultiWindowXMsgProc - XOpenDisplay () returned and successfully opened the display.
    [   404.884] winClipboardProc - XOpenDisplay () returned and successfully opened the display.
    [   405.134] winClipboardProc - winClipboardFlushWindowsMessageQueue trapped WM_QUIT message, exiting main loop. <=== ここ!
    [   405.134] winClipboardProc - XDestroyWindow succeeded.
    [   405.134] winClipboardIOErrorHandler!
    [   405.134] winMultiWindowXMsgProcIOErrorHandler!
    [   405.134] winInitMultiWindowXMsgProc - Caught IO Error.  Exiting.
    [   405.134] winDeinitMultiWindowWM - Noting shutdown in progress
    [   405.134] (EE) Server terminated successfully (0). Closing log file.
    
    

調査の結果わかったこと

  • HOMEディレクトリに自前の.startxwinrcを用意していると問題が発生する
    • デフォルトの/etc/X11/xinit/startxwinrcのスクリプトが走れば起動する
  • スクリプトで起動している/usr/bin/fbpanelの有無で再現性が変わる

解決方法

二通りの解決方法があります。
  1. Xwin.exeを直起動する
    • Cygwin-Xのアイコン(ショートカット)のプロパティを開き、「リンク先」を以下のように変更すればよい。
      • (デフォルト)C:\cygwin64\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; /usr/bin/startxwin"
      • (修正後)C:\cygwin64\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; /usr/bin/XWin.exe :0 -multiwindow"
    • この方法だとHOMEディレクトリ以下の.startxwinrcがロードされないので注意してください(.xinitrc, .Xclientsもロードされない模様)。
  2. 自前の.startxwinrcで/usr/bin/fbpanelを起動する
    • fbpanelを起動すると画面左上の最前面に常にXアイコンが表示される状態になり、非常にジャマです。fbpanelを使いたい!という人以外には、この方法はおすすめしません。
残念ながら、根本原因を突き止めることはできていません。環境によってはこの解決策は意図した通り機能しないかも…。

参考情報

いずれも自分の環境では解決には至りませんでしたが、参考まで。

(2016/11/08追記)

cygwinを最新版(2.6.0)にアップデートしたところ、インストールしたままのデフォルトの状態でXサーバーが起動できるようになっていることが分かりました。逆に、本エントリで紹介しているXWin.exeを直に起動する手順を実行するとXサーバーの起動に失敗する(いつまでまっても起動されない)のでご注意を。


0 件のコメント:

コメントを投稿