如何在 nvidia 双屏上运行 XBMC 并阻止其接管键盘和鼠标?

如何在 nvidia 双屏上运行 XBMC 并阻止其接管键盘和鼠标?

我在 Ubuntu 12.04 下设置了双屏。我有一台 GeForce 8500 GT,并使用 nVidia 控制面板在“单独屏幕模式”下设置了双屏。结果如下xorg.conf

# nvidia-settings: X configuration file generated by nvidia-settings
# nvidia-settings:  version 295.33  (buildd@zirconium)  Fri Mar 30 13:38:49 UTC 2012


Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0" 0 0
    Screen      1  "Screen1" RightOf "Screen0"
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
    Option         "Xinerama" "0"
EndSection

Section "Files"
EndSection

Section "InputDevice"

    # generated from default
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/psaux"
    Option         "Emulate3Buttons" "no"
    Option         "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"

    # generated from default
    Identifier     "Keyboard0"
    Driver         "kbd"
EndSection

Section "Monitor"

    # HorizSync source: edid, VertRefresh source: edid
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "Maxdata/Belinea B1925S1W"
    HorizSync       31.0 - 83.0
    VertRefresh     56.0 - 75.0
    Option         "DPMS"
EndSection

Section "Monitor"

    # HorizSync source: builtin, VertRefresh source: builtin
    Identifier     "Monitor1"
    VendorName     "Unknown"
    ModelName      "CRT-1"
    HorizSync       28.0 - 55.0
    VertRefresh     43.0 - 72.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce 8500 GT"
    BusID          "PCI:1:0:0"
    Screen          0
EndSection

Section "Device"
    Identifier     "Device1"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce 8500 GT"
    BusID          "PCI:1:0:0"
    Screen          1
EndSection
Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "TwinView" "0"
    Option         "metamodes" "CRT-0: nvidia-auto-select +0+0"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

Section "Screen"

# Removed Option "metamodes" "CRT-1: 1280x768 +0+0"
    Identifier     "Screen1"
    Device         "Device1"
    Monitor        "Monitor1"
    DefaultDepth    24
    Option         "TwinView" "0"
    Option         "metamodes" "CRT-1: 1360x768_60 +0+0"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

一切顺利,我的电视(第二台显示器)上显示了一个漂亮的空白 XWindow。然后,我使用以下方法从 PC 显示器上的终端启动 XBMC:

DISPLAY=:0.1 xbmc

XBMC 在电视上启动得相当好,但是我不能再使用主 PC 显示器/鼠标/键盘,因为电视屏幕上的 XBMC 似乎有焦点。我希望在电视上运行 XBMC,让孩子们使用 MCE 遥控器,而我则继续在 PC 显示器上工作。

有人知道如何克服这个问题吗?我假设需要一些 xorg.conf 趣味游戏,但说实话我不知道从哪里开始。

答案1

我正在寻找同样的东西。

我首先发现了你的问题,但经过进一步搜索后,我找到了一个可行的答案并回到这里分享。

有答案的页面位于: http://blog.burlock.org/xbmc/77-fullscreen-xbmc-without-locking-the-mouse

基本内容的复制和粘贴:

首先,您需要安装一个名为“wmctrl”的小应用程序,它允许我们更改某些窗口属性,例如隐藏边框或使窗口全屏。

sudo apt-get install wmctrl

接下来,您将需要以下脚本。出于显而易见的原因,我将其命名为“xbmc-fs”。它非常容易理解,因此请查看注释。您可能需要更改的唯一内容是选择显示器的第五行。在我的例子中,电视在显示器 1 上,所以这就是我在文件中设置的内容。如果您的电视在显示器 0 上,则只需将第 5 行的 1 更改为 0 即可。

#! /bin/bash
# Launch XBMC in windowed mode, then use wmctrl to remove the titlebar

# Select display 1
DISPLAY=:0.1

# Start XBMC without blocking this script
xbmc &

# Wait for the XBMC window to appear
status=0
while [ $status -eq 0 ]
do
   sleep 1
   status=`wmctrl -x -l | grep "XBMC Media Center" | wc -l | awk '{print $1}'`
done

# Force XBMC window to fullscreen
wmctrl -x -r XBMC Media Center.XBMC Media Center -b toggle,fullscreen

您唯一需要做的事情是确保将 XBMC 设置为与其显示显示器/电视相同的分辨率,否则某些事件可能会触发 XMBC 窗口恢复为其配置中设置的大小。

答案2

上述脚本非常完美;假设 DISPLAY 对您的设置来说是正确的。如果它不适合您,那么可能是 DISPLAY 或最后的 wmctrl 行出了问题。

它对我来说不起作用,但将这一行简化为以下内容就可以了:

wmctrl -r "XBMC Media Center" -b "toggle,fullscreen"

相关内容