Write wallpaper_outputs file and start wallpaper daemon
This commit is contained in:
parent
fd73739229
commit
b88b08cd10
|
@ -4,7 +4,6 @@ use v5.36;
|
||||||
#no warnings 'builtin::blessed';
|
#no warnings 'builtin::blessed';
|
||||||
#use experimental qw( builtin::blessed );
|
#use experimental qw( builtin::blessed );
|
||||||
|
|
||||||
# TODO: push list with dynamic wallpapers to ~/.spool/wallpaper_outputs
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Usage
|
# Usage
|
||||||
########################################################################
|
########################################################################
|
||||||
|
@ -50,6 +49,10 @@ my $last = "$ENV{'HOME'}/.spool/last_display";
|
||||||
# File to log active outputs (used by swayidle, and to attempt to restore
|
# File to log active outputs (used by swayidle, and to attempt to restore
|
||||||
my $active_outputs = "$ENV{'HOME'}/.spool/active_outputs";
|
my $active_outputs = "$ENV{'HOME'}/.spool/active_outputs";
|
||||||
|
|
||||||
|
# File to log which displays have a wallpaper active, will be written to restart wallpapers.pl
|
||||||
|
my $wallpaper_outputs .= "$ENV{'HOME'}/.spool/wallpaper_outputs";
|
||||||
|
my @wallpapers;
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Display Serials and Names
|
# Display Serials and Names
|
||||||
########################################################################
|
########################################################################
|
||||||
|
@ -82,7 +85,6 @@ my %configs = (
|
||||||
'scale' => 1.33333,
|
'scale' => 1.33333,
|
||||||
'waybar' => 'top',
|
'waybar' => 'top',
|
||||||
'fallback' => '#010101',
|
'fallback' => '#010101',
|
||||||
'bg' => "$ENV{HOME}/wallpapers/wallpaper.png"
|
|
||||||
},
|
},
|
||||||
'TV' => {
|
'TV' => {
|
||||||
'on' => 0
|
'on' => 0
|
||||||
|
@ -105,7 +107,7 @@ my %configs = (
|
||||||
'scale' => 1.33333,
|
'scale' => 1.33333,
|
||||||
'waybar' => 'top',
|
'waybar' => 'top',
|
||||||
'fallback' => '#010101',
|
'fallback' => '#010101',
|
||||||
'bg' => "$ENV{HOME}/wallpapers/wallpaper.png"
|
'bg' => 1,
|
||||||
},
|
},
|
||||||
'x13' => {
|
'x13' => {
|
||||||
'on' => 0
|
'on' => 0
|
||||||
|
@ -128,22 +130,10 @@ my %configs = (
|
||||||
'scale' => 1.5,
|
'scale' => 1.5,
|
||||||
'waybar' => 'bottom',
|
'waybar' => 'bottom',
|
||||||
'fallback' => '#010101',
|
'fallback' => '#010101',
|
||||||
'bg' => "$ENV{HOME}/wallpapers/wallpaper.png"
|
'bg' => 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'eInk+x13' => {
|
'eInk+x13' => {
|
||||||
'x13' => {
|
|
||||||
'on' => 1,
|
|
||||||
'width' => 2560,
|
|
||||||
'height' => 1440,
|
|
||||||
'x' => 0,
|
|
||||||
'y' => 0,
|
|
||||||
'rotate' => 0,
|
|
||||||
'scale' => 1.5,
|
|
||||||
'waybar' => 'bottom',
|
|
||||||
'fallback' => '#000000',
|
|
||||||
'bg' => "$ENV{HOME}/wallpapers/wallpaper.png"
|
|
||||||
},
|
|
||||||
'eInk' => {
|
'eInk' => {
|
||||||
'on' => 1,
|
'on' => 1,
|
||||||
'width' => 3200,
|
'width' => 3200,
|
||||||
|
@ -157,7 +147,19 @@ my %configs = (
|
||||||
},
|
},
|
||||||
'TV' => {
|
'TV' => {
|
||||||
'on' => 0,
|
'on' => 0,
|
||||||
}
|
},
|
||||||
|
'x13' => {
|
||||||
|
'on' => 1,
|
||||||
|
'width' => 2560,
|
||||||
|
'height' => 1440,
|
||||||
|
'x' => 0,
|
||||||
|
'y' => 0,
|
||||||
|
'rotate' => 0,
|
||||||
|
'scale' => 1.5,
|
||||||
|
'waybar' => 'bottom',
|
||||||
|
'fallback' => '#000000',
|
||||||
|
'bg' => 1,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
'TV+eInk' => {
|
'TV+eInk' => {
|
||||||
'eInk' => {
|
'eInk' => {
|
||||||
|
@ -182,7 +184,7 @@ my %configs = (
|
||||||
'scale' => 1.3333333333,
|
'scale' => 1.3333333333,
|
||||||
'waybar' => 'top',
|
'waybar' => 'top',
|
||||||
'fallback' => '#000000',
|
'fallback' => '#000000',
|
||||||
'bg' => "$ENV{HOME}/wallpapers/wallpaper.png"
|
'bg' => 1,
|
||||||
},
|
},
|
||||||
'x13' => {
|
'x13' => {
|
||||||
'on' => 0
|
'on' => 0
|
||||||
|
@ -203,7 +205,7 @@ my %configs = (
|
||||||
'scale' => 1.333333333,
|
'scale' => 1.333333333,
|
||||||
'waybar' => 'top',
|
'waybar' => 'top',
|
||||||
'fallback' => '#000000',
|
'fallback' => '#000000',
|
||||||
'bg' => "$ENV{HOME}/wallpapers/wallpaper.png"
|
'bg' => 1,
|
||||||
},
|
},
|
||||||
'x13' => {
|
'x13' => {
|
||||||
'on' => 1,
|
'on' => 1,
|
||||||
|
@ -216,7 +218,7 @@ my %configs = (
|
||||||
'scale' => 1.5,
|
'scale' => 1.5,
|
||||||
'waybar' => 'bottom',
|
'waybar' => 'bottom',
|
||||||
'fallback' => '#000000',
|
'fallback' => '#000000',
|
||||||
'bg' => "$ENV{HOME}/wallpapers/wallpaper.png"
|
'bg' => 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'all' => {
|
'all' => {
|
||||||
|
@ -242,7 +244,7 @@ my %configs = (
|
||||||
'scale' => 1.3333333,
|
'scale' => 1.3333333,
|
||||||
'waybar' => 'top',
|
'waybar' => 'top',
|
||||||
'fallback' => '#000000',
|
'fallback' => '#000000',
|
||||||
'bg' => "$ENV{HOME}/wallpapers/wallpaper.png"
|
'bg' => 1,
|
||||||
},
|
},
|
||||||
'x13' => {
|
'x13' => {
|
||||||
'on' => 1,
|
'on' => 1,
|
||||||
|
@ -254,7 +256,7 @@ my %configs = (
|
||||||
'scale' => 1.5,
|
'scale' => 1.5,
|
||||||
'waybar' => 'bottom',
|
'waybar' => 'bottom',
|
||||||
'fallback' => '#000000',
|
'fallback' => '#000000',
|
||||||
'bg' => "$ENV{HOME}/wallpapers/wallpaper.png"
|
'bg' => 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
@ -330,7 +332,7 @@ for (my $i = 0; $i < scalar(@$displays); $i++) {
|
||||||
print STDERR "Output $displays->[$i]->{name} ("
|
print STDERR "Output $displays->[$i]->{name} ("
|
||||||
. $displays->[$i]->{model}
|
. $displays->[$i]->{model}
|
||||||
. ") found without defined function. Disabling.\n";
|
. ") found without defined function. Disabling.\n";
|
||||||
push @off, $displays->[$i]->{name};
|
push(@off, $displays->[$i]->{name});
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -342,7 +344,7 @@ for (my $i = 0; $i < scalar(@$displays); $i++) {
|
||||||
$displays->[$i]->{name};
|
$displays->[$i]->{name};
|
||||||
# Otherwise simply list it for disabling
|
# Otherwise simply list it for disabling
|
||||||
} else {
|
} else {
|
||||||
push @off, $displays->[$i]->{name};
|
push(@off, $displays->[$i]->{name});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -358,7 +360,7 @@ foreach my $output (keys %$on) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
unless ($found) {
|
unless ($found) {
|
||||||
push @unavailable, $output;
|
push(@unavailable, $output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (scalar(@unavailable)) {
|
if (scalar(@unavailable)) {
|
||||||
|
@ -385,13 +387,13 @@ unless ($waybar_only) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Kill existing Waybars
|
# Kill existing Waybars and wallpaper rotation script
|
||||||
require Proc::ProcessTable;
|
require Proc::ProcessTable;
|
||||||
my $t = Proc::ProcessTable->new();
|
my $t = Proc::ProcessTable->new();
|
||||||
foreach my $p ( @{ $t->table } ) {
|
foreach my $p ( @{ $t->table } ) {
|
||||||
my $cmndline = $p->{'cmndline'};
|
my $cmndline = $p->{'cmndline'};
|
||||||
$cmndline =~ s/\s*$//g;
|
$cmndline =~ s/\s*$//g;
|
||||||
if ($cmndline =~ /^waybar.*/) {
|
if ($cmndline =~ /^(waybar|wallpaper\.pl).*/) {
|
||||||
# Never kill this process
|
# Never kill this process
|
||||||
if ($p->{'pid'} == $$) {
|
if ($p->{'pid'} == $$) {
|
||||||
next;
|
next;
|
||||||
|
@ -424,7 +426,7 @@ my $waybar = '';
|
||||||
my @active;
|
my @active;
|
||||||
foreach my $out (keys %$on) {
|
foreach my $out (keys %$on) {
|
||||||
|
|
||||||
push @active, $on->{$out}->{output};
|
push(@active, $on->{$out}->{output});
|
||||||
unless ($waybar_only) {
|
unless ($waybar_only) {
|
||||||
# Build command, starting by enabling and powering on
|
# Build command, starting by enabling and powering on
|
||||||
my $cmd = "swaymsg -s $swaysock output $on->{$out}->{output}" .
|
my $cmd = "swaymsg -s $swaysock output $on->{$out}->{output}" .
|
||||||
|
@ -451,13 +453,12 @@ foreach my $out (keys %$on) {
|
||||||
"$on->{$out}->{height}" .
|
"$on->{$out}->{height}" .
|
||||||
(defined($on->{$out}->{refresh}) ? '@'.$on->{$out}->{refresh}.'Hz' : '');
|
(defined($on->{$out}->{refresh}) ? '@'.$on->{$out}->{refresh}.'Hz' : '');
|
||||||
}
|
}
|
||||||
if (defined $on->{$out}->{bg} &&
|
if (defined($on->{$out}->{bg}) && $on->{$out}->{bg}) {
|
||||||
-f $on->{$out}->{bg})
|
push(@wallpapers, $on->{$out}->{output});
|
||||||
{
|
#$cmd .= " bg $on->{$out}->{bg} fit";
|
||||||
$cmd .= " bg $on->{$out}->{bg} fit";
|
#if (defined $on->{$out}->{fallback}) {
|
||||||
if (defined $on->{$out}->{fallback}) {
|
#$cmd .= " $on->{$out}->{fallback}";
|
||||||
$cmd .= " $on->{$out}->{fallback}";
|
#}
|
||||||
}
|
|
||||||
} elsif (defined $on->{$out}->{fallback}) {
|
} elsif (defined $on->{$out}->{fallback}) {
|
||||||
$cmd .= " bg $on->{$out}->{fallback} solid_color";
|
$cmd .= " bg $on->{$out}->{fallback} solid_color";
|
||||||
}
|
}
|
||||||
|
@ -515,6 +516,19 @@ if (open(my $fh, '>', $active_outputs)) {
|
||||||
# Restore array formatting
|
# Restore array formatting
|
||||||
$waybar = '[' . $waybar . ']';
|
$waybar = '[' . $waybar . ']';
|
||||||
|
|
||||||
|
# Write wallpaper outputs
|
||||||
|
my $w;
|
||||||
|
$w = join(' ', @wallpapers) if (scalar(@wallpapers));
|
||||||
|
if ($w) {
|
||||||
|
if (open(my $fh, '>', $wallpaper_outputs)) {
|
||||||
|
my $w = join(' ', @wallpapers);
|
||||||
|
print $fh $w;
|
||||||
|
close($fh);
|
||||||
|
} else {
|
||||||
|
print STDERR "Cannot write wallpaper outputs to: $wallpaper_outputs: $!\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# Start Waybar as fork
|
# Start Waybar as fork
|
||||||
my $pid = fork;
|
my $pid = fork;
|
||||||
unless ($pid) {
|
unless ($pid) {
|
||||||
|
@ -531,3 +545,14 @@ unless ($pid) {
|
||||||
my $waydisplay = $ENV{'WAYLAND_DISPLAY'} || 'wayland-0';
|
my $waydisplay = $ENV{'WAYLAND_DISPLAY'} || 'wayland-0';
|
||||||
`WAYLAND_DISPLAY=$waydisplay nohup $waybar_bin -b waybar0 --config=$waybar_config >> $ENV{'HOME'}/.waybar.log`;
|
`WAYLAND_DISPLAY=$waydisplay nohup $waybar_bin -b waybar0 --config=$waybar_config >> $ENV{'HOME'}/.waybar.log`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Start wallpapers script as fork
|
||||||
|
if ($w) {
|
||||||
|
$pid = fork;
|
||||||
|
unless ($pid) {
|
||||||
|
open STDIN, '/dev/null';
|
||||||
|
open STDOUT, '>>/dev/null';
|
||||||
|
open STDERR, '>>/dev/null';
|
||||||
|
`/usr/bin/perl $ENV{'HOME'}/scripts/sway/wallpaper.pl -d $w`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue