大家早上好,如果 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.d
systemd 系统上编写脚本而不是 systemd 单元。并且你的 init 脚本未能真正遵循 API,例如,它不检查“启动”或“停止” ”)。
相反,您需要连接到 X11 启动。你有五个选择(至少——在写这篇文章时不断思考更多):
系统范围内,将脚本放入
/etc/X11/Xsession.d/
.该脚本源自 X 会话设置,基本上您需要的只是该if
块。这将是我的选择。您应该能够通过放入内容来设置显示器的默认配置
/etc/X11/xorg.conf.d/
(您可能需要mkdir
首先这样做)。尽管您需要学习 Xorg 配置语法。对于一个用户,将其放入您的
~/.Xsession
.对于一个用户,将其放入桌面环境的启动脚本中(大多数都有此脚本)。或者也许您的 DE 实际上可以记住监视器设置并自动应用它。
系统范围内(或对于一个用户),将其放入 systemd用户会议。这将涉及将单元文件放入
/etc/system.d/user
或中~/.config/systemd/user/
。非常灵活,但需要学习systemd。