在 12.10 中让 DVI 通过 Lenovo USB 端口复制器工作:不稳定并让其使用 xorg.conf 文件

在 12.10 中让 DVI 通过 Lenovo USB 端口复制器工作:不稳定并让其使用 xorg.conf 文件

设置:

计算机是联想 Thinkpad SL500,使用 USB 端口复制器运行 Ubuntu 12.10 的 LiveCD。

计算机具有 USB 连接至端口复制器。端口复制器具有 DVI 至 HDMI 转换器,可通过 HDMI 连接至索尼 Bravia 电视

初期症状:

端口复制器(音频、USB 端口、LAN 端口)的所有功能(视频除外)均可正常工作。在 dmesg 中,出现以下错误:

[drm:drm_edid_block_valid] *ERROR* EDID checksum is invalid, remainder is `<num>`

usb 2-4.1: DVI-I-1: EDID invalid.

当前状态:

获取 EDID 没有问题,但有很多崩溃,并且即使强制使用也只能部分使用 Displaylink 屏幕(更多详细信息:请参阅编辑 3)。

目前的结论:

因此,经过一段时间的思考,我的结论是:

  1. 它不是即插即用的
  2. 它可能有用,但我仍然缺少一些东西
  3. 它不太稳定

仍然欢迎任何经历过此事的人提供意见。

首次故障排除:

迄今为止的故障排除:

  1. 使用 Windows Vista 时,外接显示器通过 USB 端口复制器工作
  2. 将外接显示器直接插入 HDMI 端口时,它工作正常
  3. 当插入另一台本机运行 Ubuntu 12.10 的笔记本电脑(lenovo thinkpad x61t)时,会出现同样的错误。请注意,所有涉及下载软件包和编译的测试都是在这台笔记本电脑上完成的,因为它本机运行的是 12.10。

从上面可以看出:

  • 外接显示器没有问题(因为它可以通过 HDMI 和 Windows 端口复制器工作)
  • 一台电脑没有问题(另一台电脑也有同样的情况)
  • 显卡没有问题(因为它可以通过 HDMI 和 Windows 端口复制器工作)
  • 端口复制器没有问题(因为它适用于 Windows)

似乎与通过 Ubuntu 的 USB 端口复制器识别 DVI 特别相关。

有人通过 USB 端口复制器播放视频吗?如果是,需要什么配置?

这是我需要做的最后一件事,以说服我的妻子将她的电脑从 Windows 切换到 Ubuntu。我差点就成功了!

EDIT1:第二次故障排除

尝试使用 xf86-displaylink-0.3 驱动程序。这里和其他地方有很多关于此问题的帖子。不幸的是,我遇到了一个编译错误,根据一些网站的说法,这是由于 xorg 升级造成的。有人遇到过修复方法吗?似乎加载此驱动程序可能是我需要的步骤,以解决上述错误并进入下一步使其正常工作。

错误如下:

make  all-recursive
make[1]: Entering directory `/home/rob/xf86-video-displaylink'
Making all in src
make[2]: Entering directory `/home/rob/xf86-video-displaylink/src'
/bin/bash ../libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..    -fvisibility=hidden -I/usr/include/pixman-1 -I/usr/include/libdrm -I/usr/include/xorg -I/usr/include/X11/dri   -g -O2 -MT displaylink.lo -MD -MP -MF .deps/displaylink.Tpo -c -o displaylink.lo displaylink.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -fvisibility=hidden -I/usr/include/pixman-1 -I/usr/include/libdrm -I/usr/include/xorg -I/usr/include/X11/dri -g -O2 -MT displaylink.lo -MD -MP -MF .deps/displaylink.Tpo -c displaylink.c  -fPIC -DPIC -o .libs/displaylink.o
displaylink.c: In function ‘DisplayLinkFreeRec’:
displaylink.c:165:2: warning: ‘Xfree’ is deprecated (declared at /usr/include/xorg/os.h:234) [-Wdeprecated-declarations]
displaylink.c: In function ‘DisplayLinkProbe’:
displaylink.c:204:10: warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default]
displaylink.c:226:28: warning: assignment from incompatible pointer type [enabled by default]
displaylink.c:237:2: warning: ‘Xfree’ is deprecated (declared at /usr/include/xorg/os.h:234) [-Wdeprecated-declarations]
displaylink.c: In function ‘DisplayLinkPreInit’:
displaylink.c:285:7: error: ‘struct _ScrnInfoRec’ has no member named ‘racMemFlags’
displaylink.c:285:23: error: ‘RAC_FB’ undeclared (first use in this function)
displaylink.c:285:23: note: each undeclared identifier is reported only once for each function it appears in
displaylink.c:285:32: error: ‘RAC_COLORMAP’ undeclared (first use in this function)
displaylink.c:285:47: error: ‘RAC_CURSOR’ undeclared (first use in this function)
displaylink.c:285:60: error: ‘RAC_VIEWPORT’ undeclared (first use in this function)
displaylink.c:287:7: error: ‘struct _ScrnInfoRec’ has no member named ‘racIoFlags’
displaylink.c:290:2: warning: passing argument 3 of ‘fbdevHWInit’ discards ‘const’ qualifier from pointer target type [enabled by default]
In file included from displaylink.c:52:0:
/usr/include/xorg/fbdevhw.h:21:23: note: expected ‘char *’ but argument is of type ‘const char *’
displaylink.c:351:2: warning: ‘Xalloc’ is deprecated (declared at /usr/include/xorg/os.h:215) [-Wdeprecated-declarations]
displaylink.c: In function ‘DisplayLinkScreenInit’:
displaylink.c:474:2: warning: passing argument 1 of ‘fbdevHWAdjustFrame’ makes pointer from integer without a cast [enabled by default]
In file included from displaylink.c:52:0:
/usr/include/xorg/fbdevhw.h:50:23: note: expected ‘ScrnInfoPtr’ but argument is of type ‘int’
displaylink.c:474:2: error: too many arguments to function ‘fbdevHWAdjustFrame’
In file included from displaylink.c:52:0:
/usr/include/xorg/fbdevhw.h:50:23: note: declared here
displaylink.c:554:23: warning: assignment from incompatible pointer type [enabled by default]
displaylink.c: In function ‘DisplayLinkCloseScreen’:
displaylink.c:575:2: warning: passing argument 1 of ‘pScreen->CloseScreen’ makes pointer from integer without a cast [enabled by default]
displaylink.c:575:2: note: expected ‘ScreenPtr’ but argument is of type ‘int’
displaylink.c:575:2: error: too many arguments to function ‘pScreen->CloseScreen’
make[2]: *** [displaylink.lo] Error 1
make[2]: Leaving directory `/home/rob/xf86-video-displaylink/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/rob/xf86-video-displaylink'
make: *** [all] Error 2

EDIT2:第三次故障排除:

我设法进入绿屏。我需要更改函数的返回语句,DisplayLinkCloseScreen注释掉fbdevhw.h源代码中的包含语句。

返回语句现在是:

    return pScreen->CloseScreen;

这样驱动程序就安装成功了。(警告:我不是软件工程师。)

但是,在创建了xorg.conf下的文件后xorg.conf.d,我仍然无法让 displaylink 监视器运行。displaylink 被识别,但随后被删除(从日志中可以看到)。

这是当前的 xorg 配置文件,它有几个细微的变化:

Section "Device"
    Identifier  "Configured Video Device"
    Driver      "intel"
    BusID       "PCI:00:02:0"
EndSection

Section "Monitor"
    Identifier  "Configured Monitor"
EndSection

Section "Screen"
    Identifier  "Default Screen"
    Monitor     "Configured Monitor"
    Device      "Configured Video Device"
EndSection

#################################################

Section "ServerLayout"
        Identifier      "Server Layout"          
        Screen  1       "Default Screen" 0 0
        Screen  0       "DisplayLinkScreen" rightof "Default Screen"
    Option          "Xinerama" "on"
    Option      "Clone" "off"
EndSection

#################################################

Section "Files"
        ModulePath      "/usr/lib/xorg/modules"
        ModulePath      "/usr/local/lib/xorg/modules"
    ModulePath  "/usr/local/lib/xorg/modules/drivers"
EndSection

############### DisplayLink Stuff
###############                                                                 

Section "Device"
        Identifier      "DisplayLinkDevice"
        driver          "displaylink"
        Option  "fbdev" "/dev/fb1"
    Option "ModeValidation" "NoEdidModes"
EndSection

Section "Monitor"
        Identifier      "DisplayLinkMonitor"
    Option   "ExactModeTimingsDVI" "TRUE"
    HorizSync 15.0 - 70.0
    VertRefresh 58.0 - 62.0
    Modeline     "1024x768" 65.00 1024 1048 1184 1344 768 771 777 806 -h
sync -vsync
EndSection

Section "Screen"
        Identifier      "DisplayLinkScreen"
    Device          "DisplayLinkDevice"
        Monitor         "DisplayLinkMonitor"
        SubSection "Display"
                Depth   16
        Modes   "1024x768"
        EndSubSection
EndSection

这是 Xorg.0.log 中的部分,以我这个不熟练的眼光来看,它似乎是在取消 displaylink:

[    33.383] (II) LoadModule: "displaylink"
[    33.436] (II) Loading /usr/local/lib/xorg/modules/drivers/displaylink_drv.so
[    33.444] (II) Module displaylink: vendor="X.Org Foundation"
[    33.445] (II) DL: driver for : displaylink
[    33.445] (WW) Falling back to old probe method for displaylink
[    33.484] (II) UnloadModule: "displaylink"
[    33.484] (II) Unloading displaylink

以下网站对我目前所处的位置很有帮助: http://mulchman.org/blog/?p=90

有任何想法吗?

EDIT3:第四次故障排除

好的,经过更多的工作和更多的浏览(有太多的人尝试这一点,不幸的是,我发现没有人对 12.10 有一个好的答案),我意识到了一些事情:

  1. 屏幕不必是绿色。使用 udlfb(在 12.10 中已列入黑名单)时屏幕会显示绿色,使用 udl(在 12.10 中)时屏幕不会显示任何颜色。

  2. 不一定需要加载 12.10 之外的任何模块。事实上,如果你这样做,如上所示,它会在 12.10 中引起问题,因为 xorg 1.13 的 API 已经更改,你会遇到很多编译问题

  3. 当我尝试修改以前的模块以使其在 12.10 中工作时,我最终在 xorg 中遇到了分段错误

  4. 使用本机 12.10 功能(无论是使用 udl 还是 udlfb)都不是即插即用的

  5. 我可以在测试设置中使用 udl 或 udlfb 使外接显示器工作,其中我通过运行 强制使用 xorg.conf 文件startx -- :2 -config <name of xorg.conf file>。但是:

    • 它经常导致 xorg 崩溃
    • 当它不工作时,我只能让 displaylink 显示器工作,而失去笔记本电脑显示器的显示:2;此外,我无法在 displaylink 显示器上看到 Unity
    • 我只能通过命令让它使用 displaylink 监视器startx;否则,尽管存在相同的 conf 文件,它也不会看到 displaylink 监视器,也不会使用它/etc/X11/xconf.d

相关内容