如何在Ubuntu中启动时运行xrandr命令


13

如何xrandr在启动时运行以下命令?

朗德

cvt 1368 768 
xrandr --newmode "1368x768_60.00"   85.25  1368 1440 1576 1784  768 771 781 798 -hsync +vsync
xrandr --addmode VGA1 1368x768_60.00
xrandr --output VGA1 --mode 1368x768_60.00 

1
嗨Udhaya Kumar,您是否注意到您的回答?如果可以的话,请告诉我。
Jacob Vlijm 2015年

Answers:


21

向启动应用程序添加复杂的命令

通常,您可以通过选择以下命令来添加要在启动(登录)时运行的命令:Dash> Startup Applications> Add。在这种情况下,您需要运行一个复杂的命令。

有两种方法可以做到这一点:

  1. 编写一个单独的脚本:

    #!/bin/bash
    
    cvt 1368 768 
    # xrandr only works in X11 sessions, not Wayland
    [ "$XDG_SESSION_TYPE" = x11 ] || exit 0
    xrandr --newmode "1368x768_60.00"   85.25  1368 1440 1576 1784  768 771 781 798 -hsync +vsync
    xrandr --addmode VGA1 1368x768_60.00
    xrandr --output VGA1 --mode 1368x768_60.00

    set_monitor.sh 如上所述,将脚本复制到一个空文件中,另存为,然后将以下命令添加到启动应用程序。

    /bin/bash /path/to/set_monitor.sh
    
  2. 将命令链接到一个(很长)命令:

     /bin/bash -c "cvt 1368 768&&xrandr --newmode "1368x768_60.00"   85.25  1368 1440 1576 1784  768 771 781 798 -hsync +vsync&&xrandr --addmode VGA1 1368x768_60.00&&xrandr --output VGA1 --mode 1368x768_60.00"
    

    在这种情况下,&&在命令之间使用将使每个命令尽快(如果有)成功运行,就像上一个命令在单独的行中一样成功运行。

    然后,如上所述,将命令添加到“启动应用程序”。

重要说明:向启动应用程序添加xrandr命令

xrandr启动添加命令可能很棘手。如果在桌面完全加载之前运行得太早,它们有时会中断。因此,您可能(可能)需要在命令中添加一些中断以(运行)脚本或命令,例如(在最后一种情况下):

/bin/bash -c "sleep 15&&cvt 1368 768&&xrandr --newmode "1368x768_60.00"   85.25  1368 1440 1576 1784  768 771 781 798 -hsync +vsync&&xrandr --addmode VGA1 1368x768_60.00&&xrandr --output VGA1 --mode 1368x768_60.00"

您可能需要稍微玩一下 sleep 15时间才能找到最佳时间。

注意

我省略了第一行:

xrandr

因为它不显示任何内容,但会在您的屏幕设置上显示一些信息:)


6
cvt如果您已经知道您的模型,则不需要包括该命令。
thethakuri

1
/bin/bash -c "..."包装的伎俩,我:)
Superole

在Kubuntu 17.10上,我sleep通过选择“会话启动前”选项在“启动应用程序”中添加了没有该部分的命令。

1
+1为3年前的写作# xrandr only works in X11 sessions, not Wayland。那时的未来打样很好。
WinEunuuchs2Unix

7

根据这个现在,它自动在登录部分,我已经作出了自己的脚本45custom_xrandr-settings,并使其进入/etc/X11/Xsession.d/。在Ubuntu 14.04 LTS下,它对我来说很好用。您可以将代码case放在该部分中描述的命令之后。

PRI_OUTPUT="DVI-0";
# Make and force resolution
myNewMode=$(cvt 1366 768 60 | grep -oP 'Modeline\K.*') &&                           #grep evrything after 'Modline'
myNewModeName=\"$(echo $myNewMode | grep -oP '"\K[^"\047]+(?=["\047])' )\" &&       #grep everything inside quotes
xrandr --newmode $myNewMode;
sleep 15;       
xrandr --addmode $PRI_OUTPUT $myNewModeName;

我相信以上就是您要寻找的。您只需运行xrandr命令即可查看可用的输出。该输出可以是VGAVGA-0DVI-0TMDS-1DisplayPort-0

这是我制作的完整脚本。

# To configure xrandr automatically during the first login, 
# save this script to your computer as /etc/X11/Xsession.d/45custom_xrandr-settings: 

# If an external monitor is connected, place it with xrandr
# External output may be "VGA" or "VGA-0" or "DVI-0" or "TMDS-1"

# More info at http://www.thinkwiki.org/wiki/Xorg_RandR_1.2


PRI_OUTPUT="DVI-0";
SEC_OUTPUT="DisplayPort-0";
SEC_LOCATION="left";    # SEC_LOCATION may be one of: left, right, above, or below

case "$SEC_LOCATION" in
       left|LEFT)
               SEC_LOCATION="--left-of $PRI_OUTPUT"
               ;;
       right|RIGHT)
               SEC_LOCATION="--right-of $PRI_OUTPUT"
               ;;
       top|TOP|above|ABOVE)
               SEC_LOCATION="--above $PRI_OUTPUT"
               ;;
       bottom|BOTTOM|below|BELOW)
               SEC_LOCATION="--below $PRI_OUTPUT"
               ;;
       *)
               SEC_LOCATION="--left-of $PRI_OUTPUT"
               ;;
esac

# Make and force resolution
myNewMode=$(cvt 1366 768 60 | grep -oP 'Modeline\K.*') &&                           #grep evrything after 'Modline'
myNewModeName=\"$(echo $myNewMode | grep -oP '"\K[^"\047]+(?=["\047])' )\" &&       #grep everything inside quotes
xrandr --newmode $myNewMode;
sleep 15;       
xrandr --addmode $PRI_OUTPUT $myNewModeName;


# Activate secondary out (display port)
xrandr | grep $SEC_OUTPUT | grep " connected "
if [ $? -eq 0 ]; then
#   xrandr --output $SEC_OUTPUT --auto $SEC_LOCATION
    xrandr --output $PRI_OUTPUT --mode $myNewModeName --output $SEC_OUTPUT --auto $SEC_LOCATION
else
    xrandr --output $PRI_OUTPUT --mode $myNewModeName --output $SEC_OUTPUT --off
fi

2

创建文件~/.xprofile并将行放入其中。它在X用户会话的开始运行。


3
这没有用。命令启动得太早。
Necktwi's

@neckTwi谢谢,我发现这xrandr --output ...行不通,但是前两行有效。总而言之,这对我有用。
golopot
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.