MythTV/故障排除
| MythTV 簡介 | 入門 | 安裝 | 附加功能 | 故障排除 | 結論 |
您在嘗試“urpmi mythtv-suite”後可能會遇到錯誤。如果在 MythTV 軟體包安裝期間收到“簽名錯誤”之類的錯誤,請嘗試輸入“y”繼續,並檢視軟體包是否正常工作。如果您收到“安裝失敗”之類的錯誤,可能是因為您正在執行 Mandrake 10.1 社群版。要確定您的 Mandrake 版本
$ cat /etc/mandrake-release $ Mandrakelinux release 10.1 (Community) for i586
這顯然與不同軟體包中的衝突檔案有關。讓安裝嘗試完成,然後再次執行“urpmi mythtv-suite”並檢視會發生什麼。您可以檢視錯誤訊息以隔離哪些軟體包存在問題。嘗試分別安裝這些軟體包(urpmi package_name),然後再次安裝 MythTV(urpmi mythtv-suite)。您也可以嘗試強制安裝完成
# urpmi --allow-force mythtv-suite
但是,不能保證這能奏效。
ivtv 編譯失敗有很多原因。您可以嘗試不同版本的驅動程式。如果您收到缺少目錄的錯誤,則可能缺少符號連結。檢查它是否正確
$ cd /usr/src $ ls -lF lrwxrwxrwx 1 root root 19 May 28 20:50 linux -> linux-2.6.8.1-12mdk/ drwxr-xr-x 21 root root 4096 May 28 20:50 linux-2.6.8.1-12mdk/ drwxr-xr-x 3 root root 4096 May 21 13:09 RPM/
如果符號連結丟失或指向錯誤的位置,請修復它
# ln -s /usr/src/linux-2.6.8.1-12mdk /usr/src/linux
然後檢查此其他符號連結
$ cd /lib/modules/2.6.8.1-12mdk $ ls -lF lrwxrwxrwx 1 root root 15 May 28 20:07 build -> /usr/src/linux/ ...
如果此連結丟失,請新增它
# ln -s /usr/src/linux /lib/modules/2.6.8.1-12mdk/build
在許多情況下,make 錯誤是由於您的核心原始碼版本錯誤造成的。顯然,已安裝的版本必須與您正在使用的核心匹配。如果這是問題所在,在嘗試編譯 ivtv 時,您可能會看到類似以下的錯誤
make[2]: *** No rule to make target `modules'. Stop.
或者,make 可能會正常工作,但是當嘗試載入模組時,您會得到
ivtv FATAL: Error inserting tuner (/lib/modules/2.6.8.1-12mdk/misc/tuner.ko): Invalid module format
所以首先檢查您的核心版本
$ uname -r 2.6.8.1-12mdk
看看您安裝了什麼
$ rpm -qa | grep kernel kernel-source-2.6-2.6.8.1-12mdk kernel-2.6.8.1.12mdk-1-1mdk
確保原始碼與您當前的核心版本匹配。如果不匹配,則應解除安裝舊的原始碼
# urpme kernel-source-2.4.27
顯然,用您的“不正確的原始碼”替換“2.4.27”!現在新增您真正想要的原始碼
# urpmi kernel-source-2.6-2.6.8.1-12mdk
同樣,修改語法以匹配您當前的核心。您可能需要使用 urpmq 查詢可用的 rpm,直到找到與之匹配的 rpm。(請參閱本文件的其他地方或參考Easy urpmi 網站)。不要簡單地使用“urpmi kernel-source”甚至“urpmi kernel-source-2.6”,因為這些不一定能為您提供您想要的精確原始碼。
再次檢查您的原始碼是否與您的核心版本匹配(否則任何內容都無法正確編譯!),現在 ivtv 應該可以編譯了。
如果 ivtv 仍然無法編譯,請嘗試其他版本或在各種ivtv 論壇和郵件列表存檔上查詢錯誤訊息。
這是 MythTV 中由 QT 引起的一個眾所周知的錯誤。它似乎只在一年中的半年內出現(由於夏令時)。在 MythTV 內部設定一個小時的偏移量無法解決此問題。如果這確實是您的問題,則將當前時區更改為您實際所在位置提前一個小時。然後再次執行“mythfilldatabase”(您可能還需要刪除 mythtvsetup 中的頻道列表並在填充資料庫後重新建立它)。將您的時區設定提前一個小時,MythTV 中的所有內容都應該看起來正常。
如果 MythTV 可以正常輸出到電視,但 mplayer 卻不行(即:影片和 DVD 未傳送到 TV-out),則嘗試更改 mplayer 使用的驅動程式。在 MythTV 的 MythDVD 和 MythVideo 設定中,有一行允許您呼叫外部程式,可能如下所示
mplayer -fs -zoom -quiet -vo xv %s
您需要做的是找出要使用的驅動程式。“-vo xv”正在嘗試使用 xv 驅動程式,但還有許多其他驅動程式(xv、x11、fbdev、fbdev2 等)。可以透過鍵入“mplayer -vo help”獲取完整列表
xv X11/Xv
x11 X11 ( XImage/Shm )
xover General X11 driver for overlay capable video output drivers
xmga Matrox G200/G4x0/G550 overlay in X11 window (using /dev/mga_vid)
mga Matrox G200/G4x0/G550 overlay (/dev/mga_vid)
gl X11 (OpenGL)
gl2 X11 (OpenGL) - multiple textures version
dga DGA ( Direct Graphic Access V2.0 )
sdl SDL YUV/RGB/BGR renderer (SDL v1.1.7+ only!)
ggi General Graphics Interface (GGI) output
fbdev Framebuffer Device
fbdev2 Framebuffer Device
aa AAlib
caca libcaca
dxr3 DXR3/H+ video out
zr Zoran ZR360[56]7/ZR36060 Driver (DC10(+)/buz/lml33/MatroxRR)
zr2 Zoran ZR360[56]7/ZR36060 Driver (DC10(+)/buz/lml33/MatroxRR)
vesa VESA VBE 2.0 video output
xvidix X11 (VIDIX)
cvidix console VIDIX
null Null video output
mpegpes Mpeg-PES to DVB card
yuv4mpeg yuv4mpeg output for mjpegtools
png PNG file
jpeg JPEG file
gif89a animated GIF output
tga Targa output
pnm PPM/PGM/PGMYUV file
md5sum md5sum of each frame
對於 Hauppauge WinTV PVR-350,使用“-vo x11”似乎可以正常工作(儘管它是一個幀緩衝裝置,因此也許可以使 fbdev 工作)。嘗試不同的設定並檢視哪些適用於您的 TV-out。您始終可以執行“man mplayer”以獲取手冊頁的幫助。
如果您正在使用 Hauppauge 350 的 TV-out 執行 MythTV,您會很快發現音量和靜音功能不起作用。您可以聽到聲音,但無法修改它。在撰寫本文件時,ivtv 驅動程式不支援控制音量。這為您提供了兩種選擇。您可以使用不同的遙控器控制音量(例如,使用電視的遙控器)。您甚至可能能夠透過 LIRC 配置您的紅外發射器以正確控制您的電視。或者,您可以將採集卡的音訊輸出饋送到音效卡,然後將音效卡的輸出饋送到電視。這樣,音量控制(透過音效卡)就可以由作業系統控制。因此,當 MythTV 嘗試更改音量時,它確實會影響您聽到的內容。
如果您按照上述說明使 mplayer 與採集卡上的 TV-out 一起工作,您可能會發現沒有音訊透過採集卡的 TV-out 播放。預設情況下,mplayer 會將音訊傳送到計算機的音效卡。簡單的解決方法是將採集卡的音訊輸出饋送到音效卡,並使用音效卡的輸出連線到電視。這樣,mplayer 就可以播放到電視,MythTV 在透過 Hauppauge 採集卡 TV-out 緩衝影片時也可以播放。
如果你正在使用啟動指令碼(本指南其他地方有介紹),你可能會發現無法乾淨地啟動到你的電視輸出。也就是說,你可能能夠在視窗管理器啟動並執行後讓電視輸出工作(你可以切換圖形模式到電視輸出),但你不能簡單地啟動到電視輸出影片模式。你在 /etc/X11/xorg.conf 檔案中為電視輸出定義的 ServerLayout 工作正常,但問題似乎是當 X 嘗試使用電視輸出驅動程式時,所需的模組沒有載入。
首先,使用啟動指令碼(例如本文件其他地方建議的 /usr/local/bin/start-ivtv)不如正確使用 modprobe 好。也就是說,你應該透過向 /etc/modprobe.conf 檔案新增相應的行來載入模組。然而,一些使用者發現這不起作用,他們必須使用一個在啟動期間從 /etc/rc.d/rc.local 呼叫的指令碼。
一個解決方法是讓你的電腦啟動到一個正常的視窗會話(到 GNOME、KDE 或你正在使用的任何桌面環境),然後讓該視窗會話在你的電視輸出上啟動一個新的 X 視窗會話,並使用該新 X 會話執行 mythfrontend。要實現這一點,首先編輯你的 /etc/X11/xorg.conf 檔案,使其至少有兩個不同的“ServerLayout”部分。在嘗試使用此技巧之前,請確保這些佈局都能正常且獨立地工作。
Section "ServerLayout"
Identifier "layout1"
InputDevice "Keyboard1" "CoreKeyboard"
InputDevice "Mouse1" "CorePointer"
Screen "screen1"
EndSection
Section "ServerLayout"
Identifier "TVlayout"
Screen "Hauppauge Screen"
InputDevice "Keyboard1" "CoreKeyboard"
InputDevice "Mouse1" "CorePointer"
EndSection
Identifier 中**不能包含空格**這一點非常重要。如果識別符號名稱中包含空格,則會導致 startx 函式(我們稍後將使用)出現錯誤。因此,不要將你的佈局命名為“TV layout”,而應使用“TVlayout”。再次確保這兩個佈局都適用於各自的輸出源(顯示器或電視),然後再進行下一步。現在我們可以建立一個小的指令碼,在 KDE 啟動期間,根據情況啟動我們的新例項或啟動 mythfrontend。
#!/bin/bash
if [ "$DISPLAY" = ":1" ]
then
# We are in the second KDE instance
# Launch mythTV
echo "Launching MythTV..."
mythfrontend &
else
# We are in the first KDE instance
# Launch a new KDE on the Hauppauge card
echo "Launching new KDE instance on Hauppauge 350..."
startx -- :1 -layout "TVlayout"
fi
將此指令碼儲存為 /home/mythtv/.kde/Autostart/mythscript.sh(或任何其他名稱)。像往常一樣,使其可執行。
$ chmod +x mythscript.sh
如果不明確,以下是指令碼的作用:首先,它檢查當前的 $DISPLAY 環境變數(你可以使用“set”來操作環境變數)。此變數指定我們當前上下文中顯示的內容。通常,$DISPLAY 類似於“:0.0”,表示螢幕 0。但在我們的指令碼中,我們明確地在螢幕 1 上啟動電視輸出。因此,如果指令碼發現它在螢幕 1 上執行,則它會啟動 mythTV。或者,如果它沒有在螢幕 1 上啟動,則它必須在預設螢幕 0 上執行,這意味著它是 KDE 的第一個例項,它應該啟動 KDE 的一個新例項,並將其傳送到螢幕 1。
startx 命令啟動一個新的 X 會話(並執行預設的視窗管理器,在本例中為 KDE)。“:1”表示明確地在“螢幕 1”上執行它。“-layout”選項允許我們準確選擇要使用的 ServerLayout。顯然,請將其替換為你為電視輸出設定好的 ServerLayout。
將此指令碼放在 /home/mythtv/.kde/Autostart/ 目錄中,它將在新的 KDE 會話啟動時自動執行。因此,當計算機啟動時,它將啟動 KDE(在預設螢幕 0 上),並執行指令碼。此指令碼不會在螢幕 1 上,因此它將執行 startx 以在螢幕 1 上生成 KDE 的新例項,並使用“TVlayout”ServerLayout。這個新的 KDE 會話將啟動,並且它也將自動執行指令碼。這次,指令碼將看到它正在螢幕 1 上執行,因此它只會啟動 mythfrontend。
這個小解決方法應該可以使你的 MythTV 透明地(儘管有點慢)啟動到你的電視輸出。
如果你看到螢幕上出現“淡藍色線條”,你應該使用“xvattr”命令來修復它(根據Maiku 的指南)。試試這個
# urpmi xvattr $ xvattr -a XV_COLORKEY -v 0
如果這解決了問題,那麼你應該在每次 X 啟動時都執行該命令。據報道,將該命令新增到“.xinirc”會導致與 X 衝突。相反,你可以將該命令新增到一個指令碼中,然後將該指令碼放在“/home/mythtv/.kde/Autostart/”中。
如果你在最初註冊 zap2it(DataDirect)帳戶時忘記新增頻道,或者想要修改你的頻道列表,請按照以下步驟操作。不幸的是,似乎唯一能夠使更改“生效”的方法是完全刪除舊的頻道列表,然後重新下載列表。首先,登入你的zap2it 帳戶,進行更改並儲存。然後,你應該執行“mythtvsetup”並記下你在“3. 影片源”和“4. 輸入連線”下輸入的資訊。
現在,退出設定並暫時關閉後端,然後重新進入設定。
# /etc/init.d/mythbackend stop # mythtvsetup
這次,選擇“是,刪除我的頻道設定”,然後像之前一樣重新配置它。確保選擇“下載列表”以獲取新的頻道列表。然後退出 mythtvsetup 並重新填充資料庫。
# mythfilldatabase # /etc/init.d/mythbackend start $ mythfrontend
現在你對頻道列表的修改應該已經生效了。
如果你可以透過在你的 MythTV 機器上使用“https:///mythweb/”訪問你的 MythWeb(甚至可能可以透過使用“http://internal.ip/mythweb/”訪問它),但無法從其他任何地方訪問你的 MythWeb,那麼可能是你的 ISP 阻止了 80 埠。一些 ISP 會這樣做是為了保護你免受病毒等攻擊,而另一些 ISP 則會阻止它以防止你執行 Web 伺服器。無論如何,你可以透過使用大於 1024 的埠號來解決此問題。為此,你需要編輯你的apache2 配置檔案,該檔案提供 MythWeb 檔案。因此,編輯“/etc/httpd/conf/httpd2.conf”並新增一行,例如
Listen 8050
你可以使用任何你喜歡的埠(8050 只是一個示例)。請注意,舊版本的 apache 會使用“Port 8050”之類的命令,但“Listen”是新版本(請參閱核心功能文件)。現在,你應該能夠透過使用“http://your.ip.address:8050/mythweb/”或“http://your.domain.name:8050/mythweb/”從任何地方訪問你的 MythWeb。
請記住更新你的路由器設定(如果適用)。登入你的路由器(大多數路由器在某個預定義的 IP 地址上都有一個網頁;請檢視你的文件),併為 8050 埠啟用埠轉發到你的本地網路中 MythTV 盒子的 IP 地址。
在你在 MythTV 上進行的一些操作中,它可能會崩潰並帶走 KDE。之後,你將無法返回 KDE(更不用說執行 MythTV 了)。你可能會收到這樣的錯誤訊息
There was an error setting up inter-process communications for KDE. The message returned by the system was: Could not read network connection list /home/mythtv/.DCOPserver_localhost__0 Please check that the "dcopserver" program is running!
在嘗試從命令列執行 X 時,你可能會注意到其他錯誤
usr/X11R6/bin/iceauth: timeout in locking authority file /home/mythtv/.ICEauthority Failed to load module "usr/X11R6/lib/modules/extensions/libglx.a FBIOPAN_DISPLAY: invalid argument
這個問題很容易解決。只需刪除與 ICE 和 DCOP 相關的任何檔案即可
$ cd /home/mythtv $ rm .ICEauthority* $ rm .DCOPserver* # reboot
這些被刪除的檔案將在登入期間由 KDE 重新建立,之後一切應該都能正常工作。
如果你丟失了(即忘記了)MySQL 資料庫系統的 root 密碼,那麼你無法找回它,但可以重置它。首先,停止正在執行的 mysql 守護程序
$ su # service mysql stop
然後重新啟動守護程序,但這次不使用訪問控制
mysqld_safe --skip-grant-tables &
(請記住,末尾的 & 很重要:它將程序置於後臺。)現在進入“mysql”資料庫,併為 root 使用者設定一個新密碼
# mysql -uroot mysql
> UPDATE user SET password=PASSWORD("abcdef") WHERE user="root";
> FLUSH PRIVILEGES;
> exit
其中(顯然)“abcdef”是要設定的密碼。現在重新啟動伺服器,以確保安全
# service mysql restart
你可以測試新密碼是否有效
$ mysql -u root -p
(然後輸入密碼),或者簡單地
$ mysql -u root -pabcdef