Obrigado pela direção do dobey! É um problema de citação.
Eu li um documento aqui: link
Existem duas regras: 1-Devemos usar \ s para representar o espaço em linhas normais; 2-A linha Exec é especial, se houver espaço em qualquer parte dela, temos que citar essa parte.
Para a linha TryExec, é uma linha normal, então eu devo escrever TryExec=/home/allfox/Ubuntu\sOne/fun_goods/thumbnailer/gnome_thumbnailer_with_mplayer
.
Para a linha Exec, devo escrever Exec="/home/allfox/Ubuntu One/fun_goods/thumbnailer/gnome_thumbnailer_with_mplayer" %u %o %s
.
Agora, está funcionando;)
Por que essas especificações não usam a mesma regra em todas as linhas? Demorei tanto tempo para descobrir o problema > _ < .
Para qualquer um, também postei meu thumbnailer aqui:
#!/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;
}