web-dev-qa-db-ja.com

モニター構成を設定するための開始スクリプト

朝、VGA1出力が接続されている場合にデスクトップを構成するために作成した起動時に小さなスクリプトを実行しようとしています(これはそうです)。 BunsenLabsの実行-水素(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/resVGA"の出力は次のとおりです。

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]

私は何か間違ったことをしているのですか、それとも私がやろうとしていることを根本的に誤解しているだけですか?

どんな助けでもいただければ幸いです。

3
BodneyC

X11セッションを使用できないシステム起動スクリプトに接続しています。そのため、「ディスプレイを開けません」というエラーが表示されます。 (systemdユニットではなくsystemdシステムでinit.dスクリプトを記述していることは別として、initスクリプトは実際にはAPIに準拠していません。たとえば、「」をチェックしません。開始」または「停止」)。

代わりに、X11スタートアップに接続する必要があります。 5つのオプションがあります(少なくとも、これを書いている間、もっと考え続けました):

  1. システム全体で、スクリプトを/etc/X11/Xsession.d/に配置します。このスクリプトはXセッション設定にソースされています。基本的に必要なのはifブロックだけです。これが私の選択です。

  2. /etc/X11/xorg.conf.d/(最初にmkdirする必要があるかもしれません)にデータを入れることで、モニターのデフォルト設定を設定できるはずです。 Xorg構成構文を学ぶ必要がありますが。

  3. 1人のユーザーの場合は、~/.Xsessionに入れます。

  4. 1人のユーザーの場合、デスクトップ環境の起動スクリプトに配置します(ほとんどの場合これがあります)。または、DEが実際にモニター設定を記憶し、それを自動的に適用できる場合もあります。

  5. システム全体(または1人のユーザーの場合)、systemd serセッションに配置します。これには、ユニットファイルを/etc/system.d/userまたは~/.config/systemd/user/に配置することが含まれます。非常に柔軟性がありますが、systemdの学習が必要です。

3
derobert