Default displays changed. Added fallback action.
If a config is selected for which the displays do not exist, either bail or if in recovery mode, restore 'detached'. The latter was added in anticipation of the swayidle script which will attempt to restore a layout that may no longer be possible. Since swayidle disables dpms, it must allow a backup display to come live if the last logged layout is not possible.
This commit is contained in:
parent
31fe7a032b
commit
7fb00b5f09
|
@ -36,6 +36,9 @@ my $waybar_temporary = '/tmp';
|
||||||
# File to log and recover last used layout name
|
# File to log and recover last used layout name
|
||||||
my $last = "$ENV{'HOME'}/.config/last_display";
|
my $last = "$ENV{'HOME'}/.config/last_display";
|
||||||
|
|
||||||
|
# File to log active outputs (used by swayidle, and to attempt to restore
|
||||||
|
my $active_outputs = "$ENV{'HOME'}/.config/active_outputs";
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Display Serials and Names
|
# Display Serials and Names
|
||||||
########################################################################
|
########################################################################
|
||||||
|
@ -45,9 +48,12 @@ my $last = "$ENV{'HOME'}/.config/last_display";
|
||||||
# $ swaymsg -t get_outputs
|
# $ swaymsg -t get_outputs
|
||||||
# Output eDP-1 'Unknown 0x057D *0x00000000*'
|
# Output eDP-1 'Unknown 0x057D *0x00000000*'
|
||||||
my %outputs = (
|
my %outputs = (
|
||||||
'0x00000101' => 'Sam',
|
#'0x00000101' => 'Sam',
|
||||||
|
'HTNCB00059' => 'Sam',
|
||||||
|
#'3CQ3310Q1Q' => 'Sam',
|
||||||
'3CQ4342S6W' => 'HP-1',
|
'3CQ4342S6W' => 'HP-1',
|
||||||
'3CQ3310Q1Q' => 'HP-2',
|
'0x00000101' => 'HP-2',
|
||||||
|
#'3CQ3310Q1Q' => 'HP-2',
|
||||||
'0x00000000' => 'LVDS'
|
'0x00000000' => 'LVDS'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -93,7 +99,7 @@ my %configs = (
|
||||||
'on' => 1,
|
'on' => 1,
|
||||||
'width' => 1920,
|
'width' => 1920,
|
||||||
'height' => 1080,
|
'height' => 1080,
|
||||||
'x' => 0,
|
'x' => 1920,
|
||||||
'y' => 1200,
|
'y' => 1200,
|
||||||
'rotate' => 0,
|
'rotate' => 0,
|
||||||
'waybar' => 'top'
|
'waybar' => 'top'
|
||||||
|
@ -102,7 +108,7 @@ my %configs = (
|
||||||
'on' => 1,
|
'on' => 1,
|
||||||
'width' => 1920,
|
'width' => 1920,
|
||||||
'height' => 1080,
|
'height' => 1080,
|
||||||
'x' => 1920,
|
'x' => 0,
|
||||||
'y' => 1200,
|
'y' => 1200,
|
||||||
'rotate' => 0,
|
'rotate' => 0,
|
||||||
'waybar' => 'top'
|
'waybar' => 'top'
|
||||||
|
@ -153,6 +159,7 @@ use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
my $waybar_only = 0;
|
my $waybar_only = 0;
|
||||||
|
my $restore = 0; # Set if no config is provided. Requires validation.
|
||||||
my $config;
|
my $config;
|
||||||
|
|
||||||
if (scalar(@ARGV)) {
|
if (scalar(@ARGV)) {
|
||||||
|
@ -176,12 +183,18 @@ unless (defined $config) {
|
||||||
$config = <$fh>;
|
$config = <$fh>;
|
||||||
close($fh);
|
close($fh);
|
||||||
chomp $config;
|
chomp $config;
|
||||||
|
$restore = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Bail if requested config doesn't exist
|
# Bail if requested config doesn't exist
|
||||||
unless (defined $configs{$config}) {
|
if (!defined($configs{$config})) {
|
||||||
die "$config is not a defined configuration: "
|
if ($restore) {
|
||||||
. join(', ', keys %configs) . "\n";
|
# If restoration is attempted with invalid config, just enable eDP-1
|
||||||
|
$config = 'detached';
|
||||||
|
} else {
|
||||||
|
die "$config is not a defined configuration: "
|
||||||
|
. join(', ', keys %configs) . "\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Write config that is to be used so that it can be recovered as default
|
# Write config that is to be used so that it can be recovered as default
|
||||||
|
@ -190,6 +203,7 @@ open(my $fh, '>', $last) ||
|
||||||
print $fh $config;
|
print $fh $config;
|
||||||
close($fh);
|
close($fh);
|
||||||
|
|
||||||
|
|
||||||
# Fetch connected displays
|
# Fetch connected displays
|
||||||
use JSON::XS;
|
use JSON::XS;
|
||||||
my $json = JSON::XS->new();
|
my $json = JSON::XS->new();
|
||||||
|
@ -224,6 +238,24 @@ for (my $i = 0; $i < scalar(@$displays); $i++) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Verify that all requested displays are actually available
|
||||||
|
my @unavailable;
|
||||||
|
foreach my $output (keys %$on) {
|
||||||
|
my $found = 0;
|
||||||
|
foreach my $o (keys %outputs) {
|
||||||
|
if ($outputs{$o} eq $output) {
|
||||||
|
$found = 1;
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
unless ($found) {
|
||||||
|
push @unavailable, $output;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (scalar(@unavailable)) {
|
||||||
|
die "Config requires unavailable output(s) " . join(', ', @unavailable) . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
# Skip enabling/disabling displays if only running waybar (re)start
|
# Skip enabling/disabling displays if only running waybar (re)start
|
||||||
unless ($waybar_only) {
|
unless ($waybar_only) {
|
||||||
# Number of simultaneous outputs is limited by gpu, so disabled displays
|
# Number of simultaneous outputs is limited by gpu, so disabled displays
|
||||||
|
@ -279,9 +311,11 @@ $template =~ s/^[^\[\{]*\[(.*)\]$/$1/s;
|
||||||
my $waybar = '';
|
my $waybar = '';
|
||||||
|
|
||||||
# Configure each enabled display
|
# Configure each enabled display
|
||||||
|
my @active;
|
||||||
foreach my $out (keys %$on) {
|
foreach my $out (keys %$on) {
|
||||||
|
|
||||||
unless ($waybar_only) {
|
push @active, $on->{$out}->{output};
|
||||||
|
unless ($waybar_only) {
|
||||||
# Build command, starting by enabling and powering on
|
# Build command, starting by enabling and powering on
|
||||||
my $cmd = "sway output $on->{$out}->{output} enable dpms on";
|
my $cmd = "sway output $on->{$out}->{output} enable dpms on";
|
||||||
|
|
||||||
|
@ -334,6 +368,11 @@ foreach my $out (keys %$on) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open($fh, '>', $active_outputs);
|
||||||
|
print $fh join(' ', @active);
|
||||||
|
close($fh);
|
||||||
|
|
||||||
|
|
||||||
# Restore array formatting
|
# Restore array formatting
|
||||||
$waybar = '[' . $waybar . ']';
|
$waybar = '[' . $waybar . ']';
|
||||||
|
|
||||||
|
@ -348,7 +387,7 @@ unless ($pid) {
|
||||||
open ($fh, '>', $tmp);
|
open ($fh, '>', $tmp);
|
||||||
print $fh $waybar;
|
print $fh $waybar;
|
||||||
close $fh;
|
close $fh;
|
||||||
`nohup waybar --config=$tmp`;
|
`nohup waybar --config=$tmp >> waybar.log`;
|
||||||
|
|
||||||
# Remove config
|
# Remove config
|
||||||
unlink $tmp;
|
unlink $tmp;
|
||||||
|
|
Loading…
Reference in New Issue