слайд-шоу xml, не работающий как ожидалось обоями

Я искал 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/)




  
    Slideshow
    /usr/share/backgrounds/slideshow.xml
    zoom
  
  
    <_name>OK1
    /usr/share/backgrounds/OK1.jpg
    zoom
    #000000
    #000000
    solid
  
  
    <_name>OK10
    /usr/share/backgrounds/OK10.jpg
    zoom
    #000000
    #000000
    solid
  
  
    <_name>OK100
    /usr/share/backgrounds/OK100.jpg
    zoom
    #000000
    #000000
    solid
  
  .
  .
  .

и мой slideshow.xml (сохраненный в /usr/share/backgrounds/)


  
    2009
    08
    04
    00
    00
    00
  
  
    10.0
    /usr/share/backgrounds/OK114.jpg
  
  
    3
    /usr/share/backgrounds/OK114.jpg
    /usr/share/backgrounds/OK165.jpg
  
  
    10.0
    /usr/share/backgrounds/OK165.jpg
  
  
    3
    /usr/share/backgrounds/OK165.jpg
    /usr/share/backgrounds/OK209.jpg
  
  
    10.0
    /usr/share/backgrounds/OK209.jpg
  
  
    3
    /usr/share/backgrounds/OK209.jpg
    /usr/share/backgrounds/OK42.jpg
  
  .
  .
  .

оба из этих XML-файлов огромны. 2000 + строки.

это экранирует вот это да из меня. когда я поднимаю фоновый диалог выбора изображений, я вижу свой слайд-шоу, перечисленный, и он даже показывает случайным образом выбранное изображение. но, когда я дважды щелкаю по нему, чтобы быть фоном, мои destkop обои остаются полностью черными.

я сделал опечатку, которую я не вижу? я пропускаю критическую деталь? просто потерянный на нем.

любая справка ценится, и если я забыл включать что-то, вместо того, чтобы ругать меня и преследовать меня для не включая ее, просто просить ее, и я буду счастливо включать ее.

Я искал много вещей. сопровождаемые направления на следующих сайтах (но не ограниченный): https://help.ubuntu.com/community/SlideshowWallpapers https://opensource.com/article/17/12/create-your-own-wallpaper-slideshow-gnome

теперь, я только вижу два изображения в фоновом режиме диалог выбора. мой файл слайд-шоу и одно изображение, когда должен быть слайд-шоу, и так очень много других изображений.

0
задан 7 November 2019 в 06:59

1 ответ

корректный. 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();
0
ответ дан 22 December 2019 в 00:04

Другие вопросы по тегам:

Похожие вопросы: