跳至内容

nVIDIA/TV-OUT

来自维基教科书,开放的书籍,开放的世界
NVIDIA

简介 | TV-OUT | 双显示 | SLI | 立体声


你能想象坐在 17 英寸显示器前看电影吗?用电视看所有的视频不是更好吗?大多数显卡没有提供直接连接到电视的 SCART 连接,但有一些提供 S-Video 连接。

此页面提供关于如何设置你的 X 服务器和使用电视输出的分步说明。


设置 X 服务器

[编辑 | 编辑源代码]

我们需要编辑 X 配置文件中的三个不同部分,以便让 X 服务器将你的桌面或视频渲染到连接到你的显卡的电视上,显卡通过你的显卡上的 S-Video(或复合)端口连接到电视。它们用于将显示器与设备关联并将屏幕定义起来。如果你查看你的配置文件,你会发现这些部分已经存在。不用怀疑,因为我们每个连接的显示器/电视都需要一个设备部分、一个显示器部分和一个屏幕部分。在我们的例子中,它就是原始显示器(CRT)和电视。为了确保你的显示器之后也能正常工作,**不要修改现有的部分**。我们将添加新的部分来支持电视输出和原始显示器同时工作。还有一种名为**双显示**的功能,此处不介绍。

在对配置文件进行任何修改之前,请先备份你的配置文件。

设备部分及其选项

[编辑 | 编辑源代码]

此部分将每个已安装的显卡与一个驱动程序相关联。在你浏览 xorg.conf 时,你的设备部分应该看起来像现在这样

Section "Device"
 Identifier  "Videocard0"  # unique identifier for each video card
 Driver      "nvidia"
        VendorName  "nVidia"
        BoardName   "nVidia Corporation NV15 [GeForce2 GTS/Pro]"  # see lspci
# Options ...
EndSection

此设备部分控制 DVI/VGA 输出,并忽略电视输出和所有连接到它的设备。有一些特殊的 nvidia 选项用于使用电视输出。

TVStandard

[编辑 | 编辑源代码]

你应该根据你的显示器调整此参数。一般来说,你可以从下表中获取这个值

国家
"PAL-B" 用于澳大利亚、奥地利、比利时、丹麦、爱沙尼亚、芬兰、德国、几内亚、香港、冰岛、印度、印度尼西亚、意大利、马来西亚、荷兰、新西兰、挪威、葡萄牙、新加坡、西班牙、瑞典、瑞士和俄罗斯
"PAL-D" 用于中国和朝鲜
"PAL-G" 用于丹麦、芬兰、德国、冰岛、意大利、马来西亚、荷兰、挪威、葡萄牙、西班牙、瑞典和瑞士
"PAL-H" 用于比利时
"PAL-I" 用于香港、英国和大多数前殖民地(即南非、澳大利亚等)
"PAL-K1" 用于几内亚
"PAL-M" 用于巴西
"PAL-N" 用于法国、巴拉圭和乌拉圭
"PAL-NC" 用于阿根廷
"NTSC-J" 用于日本
"NTSC-M" 用于加拿大、智利、哥伦比亚、哥斯达黎加、厄瓜多尔、海地、洪都拉斯、墨西哥、巴拿马、秘鲁、波多黎各、韩国、台湾、美国、委内瑞拉、多米尼加共和国……


用法

Option    "TVStandard" "NTSC-M"

TVOutFormat

[编辑 | 编辑源代码]

此选项用于强制输出到S-Video复合。如果此选项缺失,它将自动检测。但要小心,因为这种检测可能会失败。可能的值是SVIDEOCOMPOSITE

用法

Option    "TVOutFormat" "COMPOSITE"

ConnectedMonitor

[编辑 | 编辑源代码]
效果
"CRT" 没有效果,因为你告诉你的显卡使用连接到 15 针 VGA 连接器的显示器
"DFP" 所有内容都将打印到连接到 DVI/HDMI 输出的平板显示器上
"TV" 显示器将被禁用,所有内容都将显示在连接到 SVIDEO 或 COMPOSITE 输出的电视上
以及双显示的所有组合


用法

Option    "ConnectedMonitor" "CRT, TV"

完整的设备部分

[编辑 | 编辑源代码]

最后,你的新设备部分应该看起来像这样

Section "Device" 
 Identifier  "Card_tv"
 Driver      "nvidia"
 BusID       "PCI:1:0:0"  # May differ (not needed unless you have two or more cards)
 Option      "TVOutFormat" "COMPOSITE"  # Or "SVIDEO"
 Option      "TVStandard" "NTSC-M"
 Option      "ConnectedMonitor" "TV"
EndSection

监视器部分

[编辑 | 编辑源代码]

如前所述,我们需要设置一个监视器设备,并定义水平同步速率垂直刷新速率。你无需查找这些数字,因为通常大多数电视的这些数字都是相同的。

Section "Monitor"
 Identifier   "tv"
 HorizSync 30-50
 VertRefresh 60
EndSection

屏幕部分

[编辑 | 编辑源代码]

为了完成整个配置,我们需要添加一个屏幕部分,该部分将设备和显示器部分关联起来,并定义所需的显示分辨率。

Section "Screen"
 Identifier "Screen_tv"
 Device     "Card_tv"
 Monitor    "tv"
 DefaultDepth 16
 SubSection "Display"
 Depth     16
 Modes "1280x1024" "1152x864" "1024x768" "800x600"
 EndSubSection
EndSection

服务器布局部分

[编辑 | 编辑源代码]

现在我们有两个显示器部分、两个设备部分和两个屏幕部分。但是 X 如何知道如何处理它们呢?答案很简单。还有一个名为服务器布局的部分可以用来切换使用的设备。应该已经存在一个控制你的当前显示器并定义要使用哪些键盘和鼠标的部分。不要编辑它,除非你确切知道自己在做什么。本教程描述了如何使用多个服务器布局。因此,我们使用我们的电视屏幕部分再添加一个。

Section "ServerLayout"
 Identifier     "tv"
 Screen         0  "Screen_tv" 0 0
 InputDevice    "Mouse0" "CorePointer"
 InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

在 Debian 或 Ubuntu 系统上,你将不得不编辑 /etc/X11/Xwrapper.config 中的 allowed_users 以获得启动 X 服务器的权限。

如果 xinit 报告“用户无权运行 X 服务器,中止”,请按如下方式编辑文件/etc/X11/Xwrapper.config

更改此行

allowed_users=console

allowed_users=anybody

此外,要连接到服务器,你可能需要使用“X :1 -layout tv -auth .Xauthority”启动 X。

将所有这些内容放入你的配置文件后,我们就可以测试 X 服务器并编写一个小脚本在电视上启动 mplayer。

测试电视输出

[编辑 | 编辑源代码]

要测试电视输出,请从你的 CRT 上的 xterm 中尝试以下操作

X :1 -layout tv

你的显示器应该变黑,并可能切换到待机状态(也可能出现“信号丢失”消息)。如果你的电视已连接且输入选择设置正确,你应该看到 nVidia 徽标,然后鼠标指针应该出现。要切换显示器和电视,可以使用以下组合键

效果
CTRL+ALT+F7 这是运行着窗口管理器的原始 X 服务器。你的电视变黑。
CRTL+ALT+F8 这将是电视输出。你的显示器变黑。


如果这些键不起作用,请尝试按遍所有键:从 F1 开始,一直按到 F12。其中一个应该是你的窗口管理器,另一个是电视。其他的是终端登录提示。

(在 Ubuntu 7.04 中,在 Geforce4 Go 420 上,使用 nvidia-glx 驱动程序,在发出 X :1 -layout tv 后,发现以下情况)

(EE) NVIDIA(0): Unable to initialize the X Int10 module; the console may not
(EE) NVIDIA(0): be restored correctly on your TV.

这已报告为一个错误)。

要打开终端,请转到您的窗口管理器,打开提示符并输入

DISPLAY=:1 xterm

如果您现在切换回 F8 上的电视,屏幕左上角将弹出一个终端。您的配置通过了测试。现在我们可以尝试以一种有用的方式处理所有这些。


在尝试上面的 xterm 命令时,您可能会收到类似于以下内容的错误

AUDIT: Tue May 17 14:57:14 2005: 18768 X: client 1 rejected from local host
Xlib: connection to ":1.0" refused by server
Xlib: No protocol specified


如果您的系统使用 Xauthentication (xauth) 来限制谁可以访问正在运行的 X 服务器,则会发生此错误。您需要告诉 X 您想允许本地机器访问显示 :1。以下命令是一个跨两行拆分的长命令。它将配置 Xauthentication 以便显示 :1 接受来自与显示 :0 相同来源的连接。此命令是在上构建的,并且在 Mandriva 2005 LE 上有效,并且已知在 Fedora Core 5 和 Ubuntu 6.06 (Dapper Drake) 上有效。要为本地访问配置 Xauthentication,请打开提示符并输入

xauth add "$(/bin/hostname)/unix:1" MIT-MAGIC-COOKIE-1 \
$( xauth list | egrep "$(/bin/hostname)/unix:0" | awk '{print $3}' )

关闭电视屏幕

[编辑 | 编辑源代码]

如果您想关闭电视屏幕会话,您可以轻松地使用与杀死 X 服务器相同的步骤。

  1. 激活要终止的 X 会话
  2. 按下 ALT + CTRL + BACKSPACE
  3. 切换回您的常规会话,并继续进行,就像什么也没发生一样。


使用 TV-Out 的示例脚本

[编辑 | 编辑源代码]

在电视上启动 mplayer

[编辑 | 编辑源代码]

要获得在电视上运行 mplayer 的命令,请创建一个新文件 /usr/local/bin/mplayer.tv,其内容如下

#!/bin/sh
exec /usr/X11R6/bin/xinit /usr/bin/xterm -ut -e \
  /usr/bin/mplayer -stop-xscreensaver -fs -vo sdl "$@" -- /usr/X11R6/bin/X :1 -layout tv

如果某些命令位于其他位置,请使用 locatewhereis 查找正确的路径。(FC5:/usr/bin/xinit 和 /usr/bin/X)

使脚本可执行

chmod +x /usr/local/bin/mplayer.tv


参数 解释
exec 用 xinit 替换 shell 并转发参数
/usr/X11R6/bin/xinit xinit 打开一个新的 X 服务器并运行一个命令
/usr/bin/xterm -ut -e 这有时需要获取正确的显示
/usr/bin/mplayer 电影播放器
-stop-xscreensaver 我们不希望在观看电影时屏幕保护程序处于活动状态
-fs -vo sdl 使用全屏播放
"$@" 转发 mplayer 的参数
-- 所有后面的内容都将是 xinit 的参数,而不是 mplayer 的参数
/usr/X11R6/bin/X 这是我们要使用的 X 服务器
:1 新屏幕将位于“:1”处
-layout tv 我们使用特殊的 ServerLayout "tv"


您现在可以在电视上播放所有视频

mplayer.tv /your/path/to/video.mpeg

</includeonly>

mplayerstart:带恢复功能的 Bash 脚本

[编辑 | 编辑源代码]

mplayerstart 是 mplayer 的包装脚本,允许用户恢复以前播放文件的播放,支持多种 TV-out 方法(包括上面的 xinit 方法),禁用屏幕保护程序,恢复音量级别,以及其他功能。最新版本可在此处获取:mplayerstart

华夏公益教科书