首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一种在插入外部显示时自动应用RandR配置的工具

一种在插入外部显示时自动应用RandR配置的工具
EN

Unix & Linux用户
提问于 2010-12-02 14:12:23
回答 7查看 69.9K关注 0票数 74

是否有一种工具可以使人:

  • 记住当前的RandR配置(位置、方向、分辨率等),
  • 一旦显示被插入,就会自动应用最后已知的良好配置,而不需要使用applet或xrandr(1)?

这些配置必须在每个用户每次显示的基础上应用。

如果没有这样的工具在野外,我想自己把一个,但据我所能看到,没有办法知道一个显示器已插入。我是否需要不时地与-q进行民意测验才能发现输出是连接的或断开的,还是有更有效的方法来实现它?udev能被调成这样吗?

EN

回答 7

Unix & Linux用户

回答已采纳

发布于 2011-04-23 20:08:19

我使用这个简单的(自制)脚本来保持轮询RandR,并在VGA连接/断开时在LVDS1和VGA1之间切换。(对于HDMI输出,在以下脚本文件中,将所有VGA1更改为HDMI1)

这是个肮脏的解决方案,但效果很好。

它是为我的设置定制的:您很可能需要更改RandR输出名称(LVDS1VGA1)和不像我,您可能对VGA的RandR默认模式很满意。

代码语言:javascript
复制
#!/bin/bash

# setting up new mode for my VGA
xrandr --newmode "1920x1080" 148.5 1920 2008 2052 2200 1080 1089 1095 1125 +hsync +vsync
xrandr --addmode VGA1 1920x1080

# default monitor is LVDS1
MONITOR=LVDS1

# functions to switch from LVDS1 to VGA and vice versa
function ActivateVGA {
    echo "Switching to VGA1"
    xrandr --output VGA1 --mode 1920x1080 --dpi 160 --output LVDS1 --off
    MONITOR=VGA1
}
function DeactivateVGA {
    echo "Switching to LVDS1"
    xrandr --output VGA1 --off --output LVDS1 --auto
    MONITOR=LVDS1
}

# functions to check if VGA is connected and in use
function VGAActive {
    [ $MONITOR = "VGA1" ]
}
function VGAConnected {
    ! xrandr | grep "^VGA1" | grep disconnected
}

# actual script
while true
do
    if ! VGAActive && VGAConnected
    then
        ActivateVGA
    fi

    if VGAActive && ! VGAConnected
    then
        DeactivateVGA
    fi

    sleep 1s
done

全面步骤:

  1. 将上面的脚本(homemadeMonitor.sh)放入首选目录
  2. 通过在终端.sh中键入以下命令使chmod +x homemadeMonitor.sh文件可执行
  3. 运行.sh文件./homemadeMonitor.sh
票数 28
EN

Unix & Linux用户

发布于 2011-10-12 05:18:08

对于一个可以在每个用户和每次显示的基础上存储监控配置配置文件的工具,自行车道将准确地做到这一点。

我的笔记本电脑有一张NVIDIA卡,所以我用的是消散器后端,而不是xrandr。如果您将disper称为autodisper,Autorandr将使用disper作为后端来管理监视器。然而,在这篇文章的其余部分,为了保持一致性,我将把它称为autorandr

您可以使用autorandr --save profile_name保存配置文件。运行autorandr本身将为您提供一个配置文件列表,并确定哪个配置文件被检测为当前配置。

例如:

代码语言:javascript
复制
$ autorandr
laptop
syncmaster19 (detected)

您可以告诉它使用autorandr --change自动加载当前配置的适当配置文件。此命令与udev规则配合,在热插拔时运行它,将执行您所要求的操作。

作为一种额外的预防措施,我在该命令中添加了--default laptop,如果没有与当前配置相匹配的保存的配置文件,它将默认为笔记本电脑的显示器。因此,我用来切换显示的完整命令是:

代码语言:javascript
复制
autorandr --change --default laptop

不幸的是,我的机器没有提供任何udev输出时,我热插拔我的显示器。我使用的是NVIDIA专有驱动程序,所以这并不奇怪。所以现在我已经将它绑定到XF68Display密钥(Fn-F8),这几乎是一样好的。

票数 31
EN

Unix & Linux用户

发布于 2011-05-27 16:21:38

在回答"一个告知监视器已插入“部分问题时:

支持仍然有很大的变化,但是最近的内核支持在显示热插拔发生时生成udev事件。使用内核2.6.38和ATI X1400硬件,当我第一次连接VGA显示器时,就会得到一个事件,但是在随后的显示器断开或重新连接时没有事件发生。英特尔的硬件可能有更好的支持。是NVIDIA的专有驱动程序,目前不支持KMS;我还没有尝试在NVIDIA硬件上寻找热插拔事件,但我怀疑它是否会起作用。

如果您想试验udev,可以尝试以下步骤:

  • 更新到最新内核
  • 确保启用了内核模式设置(KMS)。如果启用,应该在内核输出中报告。我说[drm] radeon kernel modesetting enabled[drm] initializing kernel modesetting
  • 运行udevadm monitor --property,查看(dis-)连接显示时是否报告了事件。

如果要将udev事件显示在显示热插拔上,则可以触发具有udev规则的脚本,如下所示:

代码语言:javascript
复制
ACTION=="change", SUBSYSTEM=="drm", HOTPLUG=="1", RUN+="/path/to/hotplug.sh"

注意:如果您在专有二进制驱动程序中使用nVIDIA GPU,这将无法工作,因为它不使用KMS。您将不会得到任何udev事件。

票数 24
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/4489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档