Как добавить место в путь Exec в описании миниатюр?

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

Вы можете позволить gnome-screensaver работать для вас и проверить, как долго он работает.

В сценарии , вы можете сделать что-то вроде следующего:

#!/bin/bash

pidof X || exit #not running X!

export DISPLAY=":0" # use current display
DURATION="`gnome-screensaver-command -t | awk '{print $7}'`"

if [ $DURATION -gt 3600 ]; then #idle for an hour
  shutdown -h now
fi

Это ОЧЕНЬ простой пример, который может расширить каждый. Поместите его в задание cron или запустите его в режиме демона с помощью вызовов / сна.

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

1
задан 14 August 2012 в 09:04

1 ответ

Спасибо за направление Добей! Это проблема с цитированием.

Я прочитал здесь документ: http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html

[d3 ] Существует два правила: 1 - мы должны использовать \ s для представления пространства в обычных строках; 2-Строка Exec является специальной, если в любой ее части есть место, мы должны процитировать эту часть.

Для линии TryExec это нормальная строка, поэтому я должен написать TryExec=/home/allfox/Ubuntu\sOne/fun_goods/thumbnailer/gnome_thumbnailer_with_mplayer .

Для строки Exec я должен написать Exec="/home/allfox/Ubuntu One/fun_goods/thumbnailer/gnome_thumbnailer_with_mplayer" %u %o %s.

Теперь он работает;)

Почему эти спецификации не используют одно и то же правило на всех линиях? Мне потребовалось столько времени, чтобы выяснить проблему> _ & lt; .

Для всех желающих я также разместил свой thumbnailer здесь:

#!/usr/bin/env perl
use strict;
use 5.010;

# allfox's GNOME thumbnailer using MPlayer

use File::Temp qw(tempdir);
use List::Util qw(min);
use File::Spec qw();
use URI::Escape qw(uri_unescape);

&thumbnailer(@ARGV);
sub thumbnailer
{
    my($mplayer) = `which mplayer`;
    chomp $mplayer;
    my($input, $output, $size) = @_;
    $input = uri_unescape($input);
    $output = uri_unescape($output);
    if($input =~ /\.part$/i)
    {
        return;
    }
    my $common_arguments = '-nosound -noautosub -really-quiet -noar -noconsolecontrols -nojoystick -nolirc -nomouseinput -nosub';
    my $video_information = `$mplayer -identify -frames 0 $common_arguments '$input'`;
    $video_information =~ /^ID_VIDEO_WIDTH=(?<width>[0-9.]+)
                .*
                ^ID_VIDEO_HEIGHT=(?<height>[0-9.]+)
                .*
                ^ID_LENGTH=(?<length>[0-9.]+)
                /msix;
    my $width = $+{'width'} / 1;
    my $height = $+{'height'} / 1;
    my $length = $+{'length'} / 1;
    if(defined $size)
    {
        if($width > $height)
        {
            my $scale_to = min $width, $size;
            $width = $scale_to;
            $height = $height * ($scale_to / $width);
        }
        else
        {
            my $scale_to = min $height, $size;
            $width = $width * ($scale_to / $height);
            $height = $scale_to;
        }
    }
    my($temp_frames) = tempdir('gnome_thumbnailer_with_mplayer-XXXXXXXXXXXX', TMPDIR => 1, CLEANUP => 1);
    for(1..3)
    {
        $length /= 3;
        if(0 == system "$mplayer -vo jpeg:quality=100:outdir='$temp_frames' -ss $length -frames 1 $common_arguments '$input'")
        {
            last;
        }
    }
    my $convert = `which convert`;
    chomp $convert;
    opendir TEMP_FRAMES, $temp_frames;
    for(readdir TEMP_FRAMES)
    {
        if(/^\d+/)
        {
            my $jpeg_result = File::Spec->catfile($temp_frames, $_);
            system "$convert '$jpeg_result' -thumbnail ${width}x$height png:'$output'";
            last;
        }
    }
    closedir TEMP_FRAMES;
}
1
ответ дан 25 May 2018 в 07:37

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

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