Ubuntu hat sich geändert, seit andere Antworten auf diese Frage geschrieben wurden.
Tastenkombinationen wurden von gconf zu dconf verschoben. Gconf speichert seine Daten in XML-Dateien und wurde von gconf-editor
und zugegriffen gconf-tool2
. Dconf speichert seine Daten in einem binären Format und greift auf dconf-editor
und zu gsettings
.
Die Anzahl der Speicherorte für Tastenkombinationen wird verringert. Es gibt jetzt einen zentralisierten dconf-Pfad zum Speichern von Window Manager-Tastenkombinationen ( org.gnome.desktop.wm.keybindings
). Das Verzeichnis enthält Zuordnungsdateien /usr/share/gnome-control-center/keybindings/
, die zeigen, wie diese auf der Grundlage des Fenstermanagers angewendet werden, den Sie tatsächlich verwenden (compiz oder metacity).
Ein zweiter Satz von Tastenbelegungen, die sich nicht auf Window Manager beziehen, wird im Pfad dconf gespeichert org.gnome.settings-daemon.plugins.media-keys
Es gibt einen dritten Satz von Tastenkombinationen in Bezug auf Netzschalter, die im dconf-Pfad gespeichert sind org.gnome.settings-daemon.plugins.power
. Derzeit gibt es einen Fehler in der GUI, mit dem Sie Tastenkombinationen konfigurieren können. Es kennt diese Einstellungen nicht. Ich habe eine "Schlaf" -Taste auf meiner Tastatur. Wenn ich es anderen Funktionen zuweisen möchte, muss ich die Einstellung org.gnome.settings-daemon.plugins.power
manuell deaktivieren . Die GUI erledigt das nicht für mich (obwohl sie die neue Funktionalität gut zuweist).
Die andere Falte sind benutzerdefinierte Tastenkombinationen. Diese werden mit einem verschiebbaren Schema in dconf gespeichert. Es ist so gemacht, weil es eine willkürliche Anzahl von ihnen gibt. Ein vernünftiger Ansatz, der es jedoch schwieriger macht, sie über die Befehlszeile aufzulisten oder zu ändern, als es eigentlich sein sollte.
Ich habe auch herausgefunden, dass die GUI, mit der Sie Tastenkombinationen zuweisen können, in einer Weise eingeschränkt ist, die mich ärgert. Über die GUI kann jeder Aktion genau EINE Tastenkombination zugewiesen werden. In dconf können Sie ein Array von Bindungen für eine einzelne Aktion festlegen. Das ist nützlich für mich. Zum Beispiel möchte ich, dass die Aktion "Fenster schließen" sowohl dem traditionellen Alt-F4 als auch einem einfacher zu bedienenden Knopf auf meiner Tastatur zugewiesen wird.
Ich habe ein Perl-Skript geschrieben, um alle Tastenkombinationen in eine CSV-Datei zu schreiben oder sie aus der CSV-Datei wiederherzustellen. Um beispielsweise die Tastenkombinationen zu sichern, die Sie verwenden könnten:
./keybindings.pl -e /tmp/keys.csv
und um sie wiederherzustellen, könnten Sie verwenden:
./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);
}
Dies schließt die Korrektur durch user2589537 ein , um benutzerdefinierte Befehle mit Anführungszeichen zuzulassen.
gconftool-2 --dump /apps/metacity
oder so etwas.