启动脚本来设置监视器配置

启动脚本来设置监视器配置

大家早上好,如果 VGA1 输出已连接(确实如此),我正在尝试在启动时运行一个我编写的小脚本来配置我的桌面。运行 BunsenLabs-Hydrogen(基于 Debian)。

脚本:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          resVGA1
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5 
# Default-Stop:      0 1 6
# Short-Description: Setup xrandr with VGA1
# Description:       Setup Multi-screen resolution with VGA1 connected
### END INIT INFO

if xrandr | grep "VGA1 connected"; then
    xrandr -s 1366x768                     #As it doesn't default to this with VGA1 connected
    xrandr --auto                          #To populate the second screen
    xrandr --output VGA1 --right-of LVDS1  #Right of VGA1, not duplicate
fi

我已经使脚本可执行并且在调用时它可以工作,然后将其放入 /etc/init.d/ 并运行:

update-rc.d resVGA1 defaults

“ls -l /etc/rc?.d/ 的输出分辨率VGA“ 是:

lrwxrwxrwx 1 root root 17 Dec 19 12:33 /etc/rc0.d/K01resVGA1 -> ../init.d/resVGA1
lrwxrwxrwx 1 root root 17 Dec 19 12:33 /etc/rc1.d/K01resVGA1 -> ../init.d/resVGA1
lrwxrwxrwx 1 root root 17 Dec 19 12:33 /etc/rc2.d/S01resVGA1 -> ../init.d/resVGA1
lrwxrwxrwx 1 root root 17 Dec 19 12:33 /etc/rc3.d/S01resVGA1 -> ../init.d/resVGA1
lrwxrwxrwx 1 root root 17 Dec 19 12:33 /etc/rc4.d/S01resVGA1 -> ../init.d/resVGA1
lrwxrwxrwx 1 root root 17 Dec 19 12:33 /etc/rc5.d/S01resVGA1 -> ../init.d/resVGA1
lrwxrwxrwx 1 root root 17 Dec 19 12:33 /etc/rc6.d/K01resVGA1 -> ../init.d/resVGA1 

据我所知,这应该在启动时起作用,但事实并非如此 - 我检查了 /var/log/syslog 并发现了以下报告:

Dec 19 12:33:46 DankPad resVGA1[553]: Can't open display
Dec 19 12:33:46 DankPad kernel: [    0.244129] ACPI: bus type PNP unregistered
Dec 19 12:33:46 DankPad kernel: [    0.250523] pci 0000:00:1c.0: PCI bridge to [bus 02]
Dec 19 12:33:46 DankPad systemd[1]: Started LSB: Setup xrandr with VGA1.
Dec 19 12:33:46 DankPad kernel: [    0.250541] pci 0000:00:1c.1: PCI bridge to [bus 03]
Dec 19 12:33:46 DankPad kernel: [    0.250548] pci 0000:00:1c.1:   bridge window [mem 0xf2400000-0xf24fffff]
Dec 19 12:33:46 DankPad kernel: [    0.250560] pci 0000:00:1c.3: PCI bridge to [bus 05-0c]

我是否做错了什么或者只是从根本上误解了我想要做的事情?

任何帮助,将不胜感激。

答案1

您正在连接系统启动脚本,该脚本没有可用的 X11 会话。这就是您收到“无法打开显示”错误的原因。 (我会撇开你正在init.dsystemd 系统上编写脚本而不是 systemd 单元。并且你的 init 脚本未能真正遵循 API,例如,它不检查“启动”或“停止” ”)。

相反,您需要连接到 X11 启动。你有五个选择(至少——在写这篇文章时不断思考更多):

  1. 系统范围内,将脚本放入/etc/X11/Xsession.d/.该脚本源自 X 会话设置,基本上您需要的只是该if块。这将是我的选择。

  2. 您应该能够通过放入内容来设置显示器的默认配置/etc/X11/xorg.conf.d/(您可能需要mkdir首先这样做)。尽管您需要学习 Xorg 配置语法。

  3. 对于一个用户,将其放入您的~/.Xsession.

  4. 对于一个用户,将其放入桌面环境的启动脚本中(大多数都有此脚本)。或者也许您的 DE 实际上可以记住监视器设置并自动应用它。

  5. 系统范围内(或对于一个用户),将其放入 systemd用户会议。这将涉及将单元文件放入/etc/system.d/user或中~/.config/systemd/user/。非常灵活,但需要学习systemd。

相关内容