Ubuntu, bu sorunun diğer cevapları yazıldığından beri değişti.
Anahtarlıklar gconf'tan dconf'a taşındı. Gconf xml dosyalarında verilerini depolayan ve tarafından erişilen gconf-editor
ve gconf-tool2
. Dconf verilerini ikili biçimde saklar ve bunlara dconf-editor
ve gsettings
.
Tuş bağlamalarının saklandığı yerlerin sayısı azalır. Pencere yöneticisi keybindings'i ( org.gnome.desktop.wm.keybindings
) saklamak için artık merkezi bir dconf yolu var . /usr/share/gnome-control-center/keybindings/
Dizinde, gerçekte kullandığınız pencere yöneticisine (compiz veya metacity) göre nasıl uygulandığını gösteren eşleme dosyaları vardır .
Dconf yolunda ikinci bir pencere yöneticisi olmayan ilişkili anahtar bağlantıları kümesi saklanır org.gnome.settings-daemon.plugins.media-keys
Dconf yolunda kayıtlı olan güç düğmeleri ile ilgili üçüncü bir dizi anahtarlık vardır org.gnome.settings-daemon.plugins.power
. Şu anda GUI'de, tuş bağlarını yapılandırmanıza izin veren bir hata var. Bu ayarlar hakkında hiçbir şey bilmiyor. Klavyemde bir "uyku" düğmesi var. Başka bir işlevselliğe atamak istersem, ayarı org.gnome.settings-daemon.plugins.power
el ile devre dışı bırakmam gerekir. GUI benim için yapmıyor (yeni işlevselliği gayet iyi bir şekilde atamasına rağmen).
Diğer kırışıklık özel anahtar ciltleridir. Bunlar yer değiştirebilir şema kullanılarak dconf'ta saklanır. Bu şekilde yapılır, çünkü keyfi bir sayıda vardır. Makul bir yaklaşım, ancak komut satırında onları listelemeyi veya değiştirmeyi olması gerekenden daha zorlaştırır.
Ayrıca, anahtarlıklar atamanıza izin veren GUI'nin beni rahatsız edecek şekilde sınırlı olduğunu da öğrendim. GUI, her harekete tam olarak bir tane atamak için izin verir. Dconf'ta, tek bir işlem için bir dizi bağlayıcı ayarlayabilirsiniz. Bu benim için faydalıdır. Örneğin, tradertonal Alt-F4'e atanmış "pencereyi kapat" eyleminin yapılmasının yanı sıra, klavyemdeki tek bir düğmeye basmanın daha kolay olmasını istiyorum.
Tüm anahtar bağlarını bir csv dosyasına atmak ya da csv dosyasından geri yüklemek için bir Perl komut dosyası yazdım. Örneğin, kullanabileceğiniz tuş bağlamalarını atmak için:
./keybindings.pl -e /tmp/keys.csv
ve onları geri yüklemek için kullanabilirsiniz:
./keybindings.pl -i /tmp/keys.csv
#!/usr/bin/perl
use strict;
my $action = '';
my $filename = '-';
for my $arg (@ARGV){
if ($arg eq "-e" or $arg eq "--export"){
$action = 'export';
} elsif ($arg eq "-i" or $arg eq "--import"){
$action = 'import';
} elsif ($arg eq "-h" or $arg eq "--help"){
print "Import and export keybindings\n";
print " -e, --export <filename>\n";
print " -i, --import <filename>\n";
print " -h, --help\n";
exit;
} elsif ($arg =~ /^\-/){
die "Unknown argument $arg";
} else {
$filename = $arg;
if (!$action){
if ( -e $filename){
$action='import';
} else {
$action='export';
}
}
}
}
$action='export' if (!$action);
if ($action eq 'export'){
&export();
} else {
&import();
}
sub export(){
my $gsettingsFolders = [
['org.gnome.desktop.wm.keybindings','.'],
['org.gnome.settings-daemon.plugins.power','button'],
['org.gnome.settings-daemon.plugins.media-keys','.'],
];
my $customBindings = [
];
$filename = ">$filename";
open (my $fh, $filename) || die "Can't open file $filename: $!";
for my $folder (@$gsettingsFolders){
my @keylist = split(/\n/, `gsettings list-recursively $folder->[0]`);
foreach my $line (@keylist){
if ($line =~ /^([^ ]+) ([^ ]+)(?: \@[a-z]+)? (.*)/){
my ($path, $name, $value) = ($1,$2,$3);
if ($name eq "custom-keybindings"){
$value =~ s/[\[\]\' ]//g;
my @c = split(/,/, $value);
$customBindings = \@c;
} elsif ($name =~ /$folder->[1]/){
if ($value =~ /^\[|\'/){
if ($value =~ /^\[\'(?:disabled)?\'\]$/){
$value = '[]';
}
print $fh "$path\t$name\t$value\n";
}
}
} else {
die "Could note parse $line";
}
}
}
for my $folder (@$customBindings){
my $gs = `gsettings list-recursively org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:$folder`;
my ($binding) = $gs =~ /org.gnome.settings-daemon.plugins.media-keys.custom-keybinding binding (\'[^\n]+\')/g;
my ($command) = $gs =~ /org.gnome.settings-daemon.plugins.media-keys.custom-keybinding command (\'[^\n]+\')/g;
my ($name) = $gs =~ /org.gnome.settings-daemon.plugins.media-keys.custom-keybinding name (\'[^\n]+\')/g;
$command =~ s/\"/\\\"/g;
$command =~ s/^'(.*)'$/$1/g;
$command =~ s/\'/\'\\\'\'/g;
$command = "\'$command\'";
print $fh "custom\t$name\t$command\t$binding\n"
}
close($fh);
}
sub import(){
$filename = "<$filename";
open (my $fh, $filename) || die "Can't open file $filename: $!";
my $customcount=0;
while (my $line = <$fh>){
chomp $line;
if ($line){
my @v = split(/\t/, $line);
if (@v[0] eq 'custom'){
my ($custom, $name, $command, $binding) = @v;
print "Installing custom keybinding: $name\n";
print `gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom$customcount/ name \"$name\"`;
print `gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom$customcount/ command \"$command\"`;
print `gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom$customcount/ binding \"$binding\"`;
$customcount++;
} else {
my ($path, $name, $value) = @v;
print "Importing $path $name\n";
print `gsettings set \"$path\" \"$name\" \"$value\"`;
}
}
}
if ($customcount > 0){
my $customlist = "";
for (my $i=0; $i<$customcount; $i++){
$customlist .= "," if ($customlist);
$customlist .= "'/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom$i/'";
}
$customlist = "[$customlist]";
print "Importing list of custom keybindings.\n";
print `gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings \"$customlist\"`;
}
close($fh);
}
Bu, içinde tırnak işaretleri bulunan özel komutlara izin vermek için user2589537 tarafından yapılan düzeltmeyi içerir .
gconftool-2 --dump /apps/metacity
ya da onun gibi bir şey.