Я искал Google высоко и низко для решения и имел его работающий какое-то время, даже добавил, что целое убило файлов к /usr/share/backgrounds
(jpg, png, webp) и обновленный /usr/share/gnome-background-properties/backgrounds.xml
файл для включения недавно добавленных файлов.
Все хорошо работали. каждое изображение, отображенное в фоновом режиме селекторный диалог и на рабочем столе и обеспеченных слайд-шоу (как precise.xml), работало, также.
Хорошо, прохладный. Затем я создал свой собственный XML-файл слайд-шоу и добавил его к обоям в /usr/share/backgrounds/
. и это работало отлично! но, синхронизация не была к моей симпатии.
Первоначально, продолжительность была установлена на 300 секунд (пять минут) и набор перехода к 5 секундам. хороший, но я хотел внести некоторые незначительные корректировки. таким образом, я сделал то использование сценария жемчуга, который я записал (вывод которого ниже и усеченный), и теперь... ничто не работает!
Я совершенно уверен, я имею эту установку правильно, но просто не могу выяснить, почему она не будет работать.
вот мой backgrounds.xml
(сохраненный в /usr/share/gnome-background-properties/
)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wallpapers SYSTEM "gnome-wp-list.dtd">
<wallpapers>
<wallpaper deleted="false">
<name>Slideshow</name>
<filename>/usr/share/backgrounds/slideshow.xml</filename>
<options>zoom</options>
</wallpaper>
<wallpaper>
<_name>OK1</_name>
<filename>/usr/share/backgrounds/OK1.jpg</filename>
<options>zoom</options>
<pcolor>#000000</pcolor>
<scolor>#000000</scolor>
<shade_type>solid</shade_type>
</wallpaper>
<wallpaper>
<_name>OK10</_name>
<filename>/usr/share/backgrounds/OK10.jpg</filename>
<options>zoom</options>
<pcolor>#000000</pcolor>
<scolor>#000000</scolor>
<shade_type>solid</shade_type>
</wallpaper>
<wallpaper>
<_name>OK100</_name>
<filename>/usr/share/backgrounds/OK100.jpg</filename>
<options>zoom</options>
<pcolor>#000000</pcolor>
<scolor>#000000</scolor>
<shade_type>solid</shade_type>
</wallpaper>
.
.
.
</wallpapers>
и мой slideshow.xml
(сохраненный в /usr/share/backgrounds/
)
<background>
<starttime>
<year>2009</year>
<month>08</month>
<day>04</day>
<hour>00</hour>
<minute>00</minute>
<second>00</second>
</starttime>
<static>
<duration>10.0</duration>
<file>/usr/share/backgrounds/OK114.jpg</file>
</static>
<transition>
<duration>3</duration>
<from>/usr/share/backgrounds/OK114.jpg</from>
<to>/usr/share/backgrounds/OK165.jpg</to>
</transition>
<static>
<duration>10.0</duration>
<file>/usr/share/backgrounds/OK165.jpg</file>
</static>
<transition>
<duration>3</duration>
<from>/usr/share/backgrounds/OK165.jpg</from>
<to>/usr/share/backgrounds/OK209.jpg</to>
</transition>
<static>
<duration>10.0</duration>
<file>/usr/share/backgrounds/OK209.jpg</file>
</static>
<transition>
<duration>3</duration>
<from>/usr/share/backgrounds/OK209.jpg</from>
<to>/usr/share/backgrounds/OK42.jpg</to>
</transition>
.
.
.
</background>
оба из этих XML-файлов огромны. 2000 + строки.
это экранирует вот это да из меня. когда я поднимаю фоновый диалог выбора изображений, я вижу свой слайд-шоу, перечисленный, и он даже показывает случайным образом выбранное изображение. но, когда я дважды щелкаю по нему, чтобы быть фоном, мои destkop обои остаются полностью черными.
я сделал опечатку, которую я не вижу? я пропускаю критическую деталь? просто потерянный на нем.
любая справка ценится, и если я забыл включать что-то, вместо того, чтобы ругать меня и преследовать меня для не включая ее, просто просить ее, и я буду счастливо включать ее.
Я искал много вещей. сопровождаемые направления на следующих сайтах (но не ограниченный): https://help.ubuntu.com/community/SlideshowWallpapers https://opensource.com/article/17/12/create-your-own-wallpaper-slideshow-gnome
теперь, я только вижу два изображения в фоновом режиме диалог выбора. мой файл слайд-шоу и одно изображение, когда должен быть слайд-шоу, и так очень много других изображений.
корректный. 18.04. кажется, что простая перезагрузка исправила проблему, потому что теперь она работает! также, просто изученный я могу перезапустить рабочий стол гнома путем нажатия ALT-F2, type R, and press Enter
. но, чтобы удостоить чести запрос видеть сценарий, который генерирует мой слайд-шоу:
#!/usr/bin/perl
use strict;
use Term::ReadKey; ReadMode 4;
use Term::ANSIColor;
use List::Util 'shuffle';
use lib "/var/www/html/Pm";
use Bc_dir qw(external_files write_text read_text);
use Bc_misc qw(shorten_str);
my ($wchar, $hchar, $wpixels, $hpixels) = GetTerminalSize();
my $clear = `clear`;
my $CURRENTDIR = "/usr/share/backgrounds";
my $FILE = "$CURRENTDIR/slideshow.xml";
my $MAX_DURATION = 3600; # maximum display time
my $MIN_DURATION = 10; # minimum display time
my $DURATION = 300.0; # actual display time
my $MAX_TRANSITION = 8.0; # maximum transition time
my $MIN_TRANSITION = 0.25; # minimum transition time
my $TRANSITION = 3.0; # actual transition time
my $DURATION_STEP = 10; # add/minus 10 seconds to/from duration time
my $TRANSITION_STEP = 0.25; # add/minus 0.25 seconds to/from transition time
my $TRANSITION_XML = <<END;
<static>
<duration>$DURATION</duration>
<file>[thisfile]</file>
</static>
<transition>
<duration>$TRANSITION</duration>
<from>[thisfile]</from>
<to>[nextfile]</to>
</transition>
END
my @IMGS = external_files($CURRENTDIR, "jpg");
push @IMGS, external_files($CURRENTDIR, "jpeg");
push @IMGS, external_files($CURRENTDIR, "png");
push @IMGS, external_files($CURRENTDIR, "gif");
{
my @new;
foreach my $img (@IMGS) {
if ($img) { push @new, $img; }
}
@IMGS = @new;
}
@IMGS = shuffle(@IMGS);
my $slideshow = "<background>\n";
$slideshow .= <<END;
<starttime>
<year>2009</year>
<month>08</month>
<day>04</day>
<hour>00</hour>
<minute>00</minute>
<second>00</second>
</starttime>
END
my $i = 0;
my $line = 0;
foreach my $file (@IMGS) {
my $thisone = $TRANSITION_XML;
$thisone =~ s/\[thisfile\]/$CURRENTDIR\/$file/g;
my $nextfile = "";
if ($line + $i + 1 < @IMGS)
{ $nextfile = $IMGS[$line + $i + 1]; } else
{ $nextfile = $IMGS[0]; }
$thisone =~ s/\[nextfile\]/$CURRENTDIR\/$nextfile/g;
$slideshow .= $thisone;
$i++;
}
$slideshow .= "</background>\n";
sub hideCursor() { print "\e[?25l"; }
sub showCursor() { print "\e[0H\e[0J\e[?25h"; }
sub txt($;$) {
my ($txt, $clr) = @_;
my $rv = "";
if ($txt) {
if ($clr) { $rv = color($clr); }
$rv .= $txt;
if ($clr) { $rv .= color("reset"); }
}
return $rv;
}
sub error($) {
my ($txt) = @_;
my $rv = "";
if ($txt) {
$rv = color("bold red");
$rv .= $txt;
$rv .= color("reset");
}
return $rv;
}
sub notice($) {
my ($txt) = @_;
my $rv = "";
if ($txt) {
$rv = color("bold green");
$rv .= $txt;
$rv .= color("reset");
}
return $rv;
}
sub warning($) {
my ($txt) = @_;
my $rv = "";
if ($txt) {
$rv = color("bold yellow");
$rv .= $txt;
$rv .= color("reset");
}
return $rv;
}
sub end() {
ReadMode 0;
print warning("Peace out!\n\n");
exit 1;
}
my $kbkey = 0;
sub getKeypress() {
my $rv = undef;
if (defined($kbkey = ReadKey(-1))) {
$rv = $kbkey;
}
return $rv;
}
sub beep() {
print chr(7);
}
sub show() {
hideCursor();
my $lines = 40;
my $linelen = $wchar;
my $page = 0;
my $line = 0;
my @slide = split("\n", $slideshow);
my $displayed = 0;
my $stop = 0;
while (not $stop) {
# display $lines lines, and ask for keypress
if (not $displayed) {
print $clear;
for (my $i = 0; $i < $lines; $i++) {
my $thisline = "";
if ($slide[$line + $i]) {
my $output = shorten_str($line + $i . ": " . $slide[$line + $i], $linelen) . "\n";
print $output;
}
}
print "\n";
print warning("note: long lines are truncated to a maximum length of $linelen chars in this display!\n");
print "press \n";
print " " . warning("N") . " for next page\n";
print " " . warning("P") . " for previous page\n";
print " " . warning("H") . " to jump to first page\n";
print " " . warning("E") . " to jump to last page\n";
print " " . warning("Q") . " to return to main menu\n";
$displayed = 1;
}
my $key = getKeypress();
if ($key) {
lc $key;
if ($key eq "q") {
$stop = 1;
} elsif ($key eq "n") {
$line += $lines;
if ($line > @slide - ($lines)) { $line = @slide - ($lines); }
$displayed = 0;
} elsif ($key eq "p") {
$line -= $lines;
if ($line < 0) { $line = 0; }
$displayed = 0;
} elsif ($key eq "h") {
$line = 0;
$displayed = 0;
} elsif ($key eq "e") {
$line = @slide - $lines;
$displayed = 0;
}
}
}
showCursor();
}
sub writefile() {
write_text($FILE, $slideshow);
}
sub showmenu(;$) {
my ($msg) = @_;
print $clear;
if (ref $msg eq "HASH") {
if ($msg->{warning})
{ print warning($msg->{warning} . "\n\n"); }
} elsif ($msg) {
print txt($msg) . "\n\n";
}
print "press\n";
print " " . warning("S") . " to display the slideshow data\n";
print " " . warning("W") . " to write the slideshow data to " . txt($FILE, "bold white") . "\n";
print " " . warning("L") . " to load the slideshow data from " . txt($FILE, "bold white") . "\n";
print " " . warning("+") . " to increase display DURATION of each image by 10 seconds\n";
print " " . warning("-") . " to decrease display DURATION of each image by 10 seconds\n";
print " " . warning("*") . " to increase TRANSITION time by 0.25 seconds\n";
print " " . warning("/") . " to decrease TRANSITION time by 0.25 seconds\n";
print "\n " . error("Q") . " to quit\n";
print "\n";
print " Display Time: " . warning($DURATION) . "\n";
print " Transition Time: " . warning($TRANSITION) . "\n";
print "\n";
if (ref $msg eq "HASH") {
if ($msg->{error})
{ print error($msg->{error} . "\n"); }
}
print "Selection: ";
}
sub initSlideshow() {
$TRANSITION_XML = <<END;
<static>
<duration>$DURATION.0</duration>
<file>[thisfile]</file>
</static>
<transition>
<duration>$TRANSITION</duration>
<from>[thisfile]</from>
<to>[nextfile]</to>
</transition>
END
@IMGS = external_files($CURRENTDIR, "jpg");
push @IMGS, external_files($CURRENTDIR, "jpeg");
push @IMGS, external_files($CURRENTDIR, "png");
push @IMGS, external_files($CURRENTDIR, "gif");
{
my @new;
foreach my $img (@IMGS) {
if ($img) { push @new, $img; }
}
@IMGS = @new;
}
@IMGS = shuffle(@IMGS);
$slideshow = "<background>\n";
$slideshow .= <<END;
<starttime>
<year>2009</year>
<month>08</month>
<day>04</day>
<hour>00</hour>
<minute>00</minute>
<second>00</second>
</starttime>
END
my $i = 0;
foreach my $file (@IMGS) {
my $thisone = $TRANSITION_XML;
$thisone =~ s/\[thisfile\]/$CURRENTDIR\/$file/g;
my $nextfile = "";
if ($line + $i + 1 < @IMGS)
{ $nextfile = $IMGS[$line + $i + 1]; } else
{ $nextfile = $IMGS[0]; }
$thisone =~ s/\[nextfile\]/$CURRENTDIR\/$nextfile/g;
$slideshow .= $thisone;
$i++;
}
$slideshow .= "</background>\n";
}
sub load() {
$slideshow = read_text($FILE);
}
my $stop = 0;
showmenu();
while (not $stop) {
my $keypressed = getKeypress();
if ($keypressed) {
lc $keypressed;
if ($keypressed eq "q") {
print error("Q\n\n");
$stop = 1;
} elsif ($keypressed eq "w") {
print warning("W\n\n");
writefile();
my %msg;
$msg{warning} = "Slideshow Data Written to $FILE";
showmenu(\%msg);
} elsif ($keypressed eq "s") {
print warning("S\n\n");
show();
showmenu();
} elsif ($keypressed eq "l") {
print warning("L\n\n");
load();
my %msg;
$msg{warning} = "Slideshow Data Read from $FILE";
showmenu(\%msg);
} elsif ($keypressed eq "+") {
print warning("+\n\n");
$DURATION += $DURATION_STEP;
if ($DURATION > $MAX_DURATION) { $DURATION = $MAX_DURATION; }
initSlideshow();
showmenu();
} elsif ($keypressed eq "-") {
print warning("-\n\n");
$DURATION -= $DURATION_STEP;
if ($DURATION < $MIN_DURATION) { $DURATION = $MIN_DURATION; }
initSlideshow();
showmenu();
} elsif ($keypressed eq "*") {
print warning("*\n\n");
$TRANSITION += $TRANSITION_STEP;
if ($TRANSITION > $MAX_TRANSITION) { $TRANSITION = $MAX_TRANSITION; }
initSlideshow();
showmenu();
} elsif ($keypressed eq "/") {
print warning("/\n\n");
$TRANSITION -= $TRANSITION_STEP;
if ($TRANSITION < $MIN_TRANSITION) { $TRANSITION = $MIN_TRANSITION; }
initSlideshow();
showmenu();
} else {
beep();
showmenu({error=>"invalid key"});
}
}
}
end();