Ubuntu a changé depuis que d’autres réponses à cette question ont été écrites.
Les raccourcis clavier sont passés de gconf à dconf. Gconf stocke ses données dans des fichiers XML et a été consulté par gconf-editor
et gconf-tool2
. Dconf stocke ses données dans un format binaire et est accessible par dconf-editor
et gsettings
.
Le nombre d'emplacements dans lesquels les raccourcis clavier sont stockés est réduit. Il existe maintenant un chemin dconf centralisé pour stocker les liaisons de clés du gestionnaire de fenêtres ( org.gnome.desktop.wm.keybindings
). Il existe dans le répertoire des fichiers de mappage /usr/share/gnome-control-center/keybindings/
indiquant comment ceux-ci sont appliqués en fonction du gestionnaire de fenêtres que vous utilisez réellement (compiz ou metacity).
Un deuxième ensemble de raccourcis clavier liés au gestionnaire de fenêtres est stocké dans le chemin d'accès dconf org.gnome.settings-daemon.plugins.media-keys
Un troisième ensemble de liaisons de clé liées aux boutons d’alimentation est stocké dans le chemin d'accès dconf org.gnome.settings-daemon.plugins.power
. Il y a actuellement un bogue dans l'interface graphique qui vous permet de configurer les liaisons de clé. Il ne sait pas à propos de ces paramètres. J'ai un bouton "sommeil" sur mon clavier. Si je veux le réaffecter à une autre fonctionnalité, je dois désactiver le paramètre org.gnome.settings-daemon.plugins.power
manuellement. L'interface graphique ne le fait pas pour moi (bien qu'il assigne parfaitement la nouvelle fonctionnalité).
L'autre ride est des raccourcis clavier personnalisés. Celles-ci sont stockées dans dconf à l'aide d'un schéma déplaçable. Cela se fait de cette façon car il y en a un nombre arbitraire. Une approche raisonnable, mais il est plus difficile de les répertorier ou de les modifier via la ligne de commande.
J'ai également découvert que l'interface graphique qui vous permet d'attribuer des raccourcis clavier est limitée de manière à m'agacer. L'interface graphique permet d'attribuer UNE SEULE touche à chaque action. Dans dconf, vous pouvez définir un tableau de liaisons pour une seule action. Cela m'est utile. Par exemple, j'aime bien que l'action "fermer la fenêtre" soit assignée à la touche Alt-F4 traditionnelle, ainsi qu'à un bouton plus facile à utiliser sur mon clavier.
J'ai écrit un script Perl pour vider toutes les associations de clés dans un fichier csv ou pour les restaurer à partir du fichier csv. Par exemple, pour vider les raccourcis clavier que vous pourriez utiliser:
./keybindings.pl -e /tmp/keys.csv
et pour les restaurer, vous pouvez utiliser:
./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);
}
Cela inclut le correctif de l' utilisateur2589537 pour autoriser les commandes personnalisées contenant des guillemets.
gconftool-2 --dump /apps/metacity
ou quelque chose comme ça.