2006年1月24日 (火曜日)

22:24:50 # Life xawtv debug. dist-upgradeしたら,xawtvをフルスクリーンモードに切替えようとしても,適切な画面モードに切り替わらなくなった.そのため,フルスクリーンモードでもテレビが小さくうつる. カーネルは変わっていないので,Xかxawtvだな. xawtvはNMUはされているが,あまり問題がなさそうにみえる.Xか? x11/xt.cにて,ifdef HAVE_LIBXXF86VMもしくはHAVE_LIBXRANDRで,do_vidmode_modeswitchがかこわれている. が,xxf86vmも,xrandrもあるので問題なさそう. ソースを見ていると,-v オプションをつけるとデバッグメッセージを吐くみたいなのでそれで確認. どうも,フルスクリーンにしても1280x1024のままのようだ. なんだかNETWMというもので設定しているようだ. man xawtvrcを確認すると use-wm-fullscreen = on | offというオプションがあるらしい.このオプションを試しても効いていないきがする、とおもったらファイル名を間違えていた。.xawtvrcではなく.xawtv。

expose count=0
expose: xv reblit
video: shell: size 384x288+17+89
Xvideo: video: win=0x2400059, src=640x480+0+0 dst=384x288+0+0
PropertyNotify _NET_WM_ICON_GEOMETRY
cmd: "fullscreen"
fullscreen on via netwm
vm: current=1280x1024
PropertyNotify _NET_WM_ALLOWED_ACTIONS
PropertyNotify _NET_WM_STATE
PropertyNotify _NET_FRAME_EXTENTS
video: shell: size 1280x1024+0+0
Xvideo: video: win=0x2400059, src=640x480+0+0 dst=1280x960+0+32
expose count=0
expose: xv reblit
	

問題は,netwm fullscreenをサポートしていないのにmetacityがやりますとこたえているか, xawtvがnetwm fullscreenをサポートしていないのに使える,と判断してしまっているか(x11/wmhooks.c:wm_detect), xawtvのnetwm fullscreenの呼び方(x11/wmhooks.c)が間違っているか,あたりのような気がする.

    if (NULL == wm_stay_on_top &&
        0 == wm_check_capability(dpy,root,_NET_SUPPORTED,
	  _NET_WM_STATE_FULLSCREEN)) {
	

デバッグ出力を見ると, wm cap: _NET_WM_STATE_FULLSCREEN がきていることがわかる. どうもmetacityの問題のようだ. metacityのChangeLogを眺めると,そのサポートは2002年くらいに追加されたものらしい.(src/window.c, src/display.c). src/window.cをよんでいると,規格についての主義主張がコメントにちりばめられている. フルスクリーンを指定しているのにウィンドウをリサイズできない場合には画面サイズのほうを変更してほしいのだが,そういうロジックは無いような気がする.

下記パッチを適用してみたが,画面モードはきりかわらず.gnome panelが残るという状況に. これはxawtvの把握している画面モードの情報がおかしいとみた.

--- tmp/xawtv-3.94/x11/xt.c	2004-06-14 19:43:37.000000000 +0900
+++ xawtv-3.94/x11/xt.c	2006-01-25 08:49:13.000000000 +0900
@@ -970,7 +970,7 @@
     int    wpx,wpy,mask;
     unsigned int vp_width, vp_height;
 
-    if (use_wm_fullscreen && wm_fullscreen) {
+    if (0 && use_wm_fullscreen && wm_fullscreen) {
 	/* full service for us, next to nothing to do */
 	fs = !fs;
 	if (debug)

	

一日おいてみなおした結果,結局 fs_width, fs_height が定義されていないことが問題だったようで, Xの提供しているビデオモードの一覧を 0x0に対して検索していた. fs_width, fs_heightを提供してあげればうまく動いた. /etc/X11/xawtvrcにfullscreenのときの解像度をあげればよいのだ. しかし,これだけだと画面に対して仮想画面がでかく,TVを表示していない部分がまず画面にでかくなってしまい, マウスでスクロールしないと到達できないというちょっとださい状況になる. これはuse_wm_fullscreenをではない場合にはマウスを移動したりして細かく処理をしているようだ.

[global]
freqtab = japan-bcast
fullscreen = 640 x 480

(以下略)
	
Junichi Uekawa

$Id: dancer-diary.el,v 1.90 2006/01/31 11:16:16 dancer Exp $