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://127.0.0.1/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