Portál AbcLinuxu, 18. dubna 2024 20:54

openSUSE Leap 42.1 64-bit (GNOME 3.16.2)

openSUSE Leap 42.1 64-bit (GNOME 3.16.2)

Adresa tématu či pozadí: http://interfacelift.com/wallpaper/downloads/date/widescreen/

Pozadí je ve skutečnosti generováno dynamicky (Perl + ImageMagic) každých pět minut náhodným výběrem dvou širokoúhlých obrázků z databáze vytvořené z InterfaceLift.com.

Gnome Shell rozšíření:

Cohen | 13. 1. 2016 | Zhlédnuto: 858× | Oblíbenost: 1

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

wamba avatar 13.1.2016 20:49 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: openSUSE Leap 42.1 64-bit (GNOME 3.16.2)
Odpovědět | Sbalit | Link | Blokovat | Admin
a to nejzajímavější, ten Perl script nám neukážeš?
This would have been so hard to fix when you don't know that there is in fact an easy fix.
Cohen avatar 14.1.2016 00:53 Cohen | skóre: 21 | blog: Drobnosti | Brno
Rozbalit Rozbalit vše Re: openSUSE Leap 42.1 64-bit (GNOME 3.16.2)

Je to starý kód, šlo by to napsat lépe, ale funguje to.

#!/usr/bin/env perl

use strict;
use warnings;
use utf8;
use File::Copy;
use File::Temp qw/ tempfile /;

binmode(STDIN, "utf8");
binmode(STDOUT, "utf8");
binmode(STDERR, "utf8");

use File::Spec;


# Výpis informací o použití programu.
sub print_help {

    my $exit_code = shift @_;
    $exit_code = 1 unless $exit_code;

    print STDERR "Použití:\n";
    print STDERR "  $0 <adresář_s_obrázky> <cílový_soubor_s_tapetou>\n";

    exit $exit_code;

}

sub get_full_path {
    my $arg = shift @_;
    return File::Spec->canonpath(File::Spec->rel2abs($arg));
}


#
# Main
#

my ($wdir, $wfilelink, $wfile, $wfileold) = (undef, undef, undef, undef);

unless (($#ARGV + 1) == 2 and -d $ARGV[0] and -l $ARGV[1]) {
    print_help;
} else {
    $wdir = get_full_path($ARGV[0]);
    $wfilelink = get_full_path($ARGV[1]);
}

if (-f "$wfilelink.1") {
    $wfileold = "$wfilelink.1";
    $wfile = "$wfilelink.2";
} else {
    $wfileold = "$wfilelink.2";
    $wfile = "$wfilelink.1";
}

my $pid = `pgrep gnome-session`;
chomp $pid;
my $dbus = `grep -z "DBUS_SESSION_BUS_ADDRESS" "/proc/$pid/environ" 2>/dev/null`;
chomp $dbus;
$dbus =~ s/^DBUS_SESSION_BUS_ADDRESS=//g;
exit if ($dbus =~ /^\s*$/);

opendir(WDIR, $wdir)
    || die("Nezdrařilo se čtení obsahu adresáře $wdir: $!");
my @wdircontent = grep { $_ !~ /^(\.|\.\.)$/ && -f "$wdir/$_" } readdir(WDIR);
closedir(WDIR);

my $randomwfile1 = get_full_path(File::Spec->join($wdir, $wdircontent[int(rand($#wdircontent + 1))]));
my $randomwfile2 = get_full_path(File::Spec->join($wdir, $wdircontent[int(rand($#wdircontent + 1))]));

my ($tmpfile1, $tmpfilename1) = tempfile(UNLINK => 1, SUFFIX => '.png')
        or die "$!";
my ($tmpfile2, $tmpfilename2) = tempfile(UNLINK => 1, SUFFIX => '.png')
        or die "$!";

#system('convert', "$randomwfile1", '-quality', '100', '-resize', 'x1200', '-gravity', 'center', '-crop', '1920x1200+0+0', "$tmpfilename1") == 0
system('convert', "$randomwfile1", '-quality', '100', '-resize', 'x1600', '-gravity', 'center', '-crop', '2560x1440+0+0', "$tmpfilename1") == 0
    or die "Convert 1 failed: $!";
system('convert', "$randomwfile2", '-quality', '100', '-resize', 'x1200', '-gravity', 'center', '-crop', '1600x1200+0+0', "$tmpfilename2") == 0
    or die "Convert 2 failed: $!";
system('montage', "$tmpfilename1", "$tmpfilename2", '-quality', '100', '-background', 'black', '-mode', 'Concatenate', '-gravity', 'SouthWest', '-tile', 'x1', "$wfile") == 0
    or die "Montage failed: $!";

open(INFO, ">:encoding(UTF-8)", "/tmp/wallpaper-info.txt")
        or die("open() failed: $!");
    print INFO "left picture:  $randomwfile1\n"
              ."right picture: $randomwfile2\n";
close(INFO);

unlink "$wfileold" if (-f "$wfileold");
unlink "$wfilelink" if (-l "$wfilelink");
symlink("$wfile", "$wfilelink");

$wfile =~ s/'/'\\''/g; # Aby to prošlo v následujícím příkazu, pokud je ve jméně souboru apostrof.
#system('export DBUS_SESSION_BUS_ADDRESS='."'$dbus'".'; gsettings set org.gnome.desktop.background picture-uri '."'$wfile'");
system('export DBUS_SESSION_BUS_ADDRESS=$(grep -z "DBUS_SESSION_BUS_ADDRESS" "/proc/$(pgrep gnome-session)/environ" | cut -d= -f2-); gsettings set org.gnome.desktop.background picture-uri '."'$wfile'");

Je to nastaveno na dvoumonitorovou konfiguraci: vlevo 2560×1440 a vpravo 1600×1200 zarovnaný na spodní okraj levého monitoru.

OpenPGP key fingerprint: 489C 5EC8 0FD6 2BE8 9E59 B4F7 19C1 3E8C E0F5 DB61 (https://www.fi.muni.cz/~xruzick7/pgp-klic/)
Cohen avatar 14.1.2016 09:38 Cohen | skóre: 21 | blog: Drobnosti | Brno
Rozbalit Rozbalit vše Re: openSUSE Leap 42.1 64-bit (GNOME 3.16.2)

V noci jsem si ještě vzpomněl, že vlastně ten skript nepůjde spustit na místě, kde to ještě není nachystaný ten symlink (kvůli prodlevě při generování nového obrázku, kdy by nebyl soubor s tapetou dobře vytvořený, se obrázek střídavě generuje do dvou souborů a po vygenerování se jen přesměruje symlink, aby se plynule bez prodlev zobrazila nová tapeta), takže před případným použitím doporučuji aplikovat tenhle patch:

--- a/wallpaper-random-change.pl	2016-01-14 09:37:20.597823140 +0100
+++ b/wallpaper-random-change.pl	2016-01-14 09:37:32.513515615 +0100
@@ -38,7 +38,7 @@
 
 my ($wdir, $wfilelink, $wfile, $wfileold) = (undef, undef, undef, undef);
 
-unless (($#ARGV + 1) == 2 and -d $ARGV[0] and -l $ARGV[1]) {
+unless (($#ARGV + 1) == 2 and -d $ARGV[0] and (-l $ARGV[1] or not -e $ARGV[1])) {
     print_help;
 } else {
     $wdir = get_full_path($ARGV[0]);
OpenPGP key fingerprint: 489C 5EC8 0FD6 2BE8 9E59 B4F7 19C1 3E8C E0F5 DB61 (https://www.fi.muni.cz/~xruzick7/pgp-klic/)
wamba avatar 14.1.2016 12:16 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: openSUSE Leap 42.1 64-bit (GNOME 3.16.2)
hm, sice jsem myslel, že ten skript bude automaticky stahovat pozadí z té stránky a pak je nastaví, ale i tak díky
This would have been so hard to fix when you don't know that there is in fact an easy fix.
Cohen avatar 14.1.2016 12:33 Cohen | skóre: 21 | blog: Drobnosti | Brno
Rozbalit Rozbalit vše Re: openSUSE Leap 42.1 64-bit (GNOME 3.16.2)
Myslím, že tomu se tam i aktivně brání (mají nějaký vlastní stahovací soft [minimálně pro Mac OS X] a nejsem si jistý, jestli ho nemají nějak i zpoplatněný), ale primární důvod by pro mne stejně byl, že ne všechny ty tapety si mi líbí, takže si ručně stahuji jen to, co mi padne do oka.
OpenPGP key fingerprint: 489C 5EC8 0FD6 2BE8 9E59 B4F7 19C1 3E8C E0F5 DB61 (https://www.fi.muni.cz/~xruzick7/pgp-klic/)

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.