En règle générale, je charge une nouvelle version pour chaque version afin de conserver mon système d'exploitation tout en préservant la dernière version sur une autre partition en tant que sauvegarde. J'utilise aussi beaucoup de mappages de clés personnalisés.
Jusqu'à présent, j'ai compris comment transférer la majeure partie de ma configuration entre systèmes, mais je ne sais pas où les mappages de raccourcis clavier personnalisés sont stockés.
Est-ce que quelqu'un sait où gnome les met? Existe-t-il des fichiers de configuration utilisateur (par exemple, ~ /) et de configuration système (par exemple/etc)?
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 via dconf-editor
et gsettings
.
Le nombre d'emplacements dans lesquels les raccourcis clavier sont stockés est réduit. Il existe maintenant un chemin d'accès dconf centralisé pour stocker les liaisons de clé du gestionnaire de fenêtres (org.gnome.desktop.wm.keybindings
). Il existe des fichiers de mappage dans le répertoire /usr/share/gnome-control-center/keybindings/
qui montrent comment ils sont appliqués en fonction du gestionnaire de fenêtres que vous utilisez réellement (compiz ou metacity).
Un deuxième ensemble de liaisons de clé non liées 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 dans 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 ser2589537 pour autoriser les commandes personnalisées contenant des guillemets.
Comment sauvegarder les paramètres dconf tels que les raccourcis clavier
Jetez-les tous dans un fichier:
dconf dump / >~/.config/dconf/user.conf
Ouvrez ce fichier dans un éditeur de texte et sélectionnez les paramètres qui vous intéressent:
editor ~/.config/dconf/user.conf
Si vous utilisez Vim, vous voudrez cette syntaxe en surbrillance .
Vous allez bientôt vous demander quel est <Primary>
.
Si vous ne connaissez pas le nom du paramètre, mais savez comment le modifier à partir d'une interface graphique telle que unity-control-center
, exécutez:
dconf watch /
et ensuite les modifier. Le réglage exact apparaîtra alors sur le terminal.
Lorsque vous souhaitez restaurer ces paramètres, exécutez:
dconf load / <~/.config/dconf/user.conf
Git suit le fichier de configuration pour ne jamais le perdre. https://github.com/andsens/homeshick est ma méthode préférée actuelle.
Testé sur Ubuntu 15.10. Conseil adapté de: http://catern.com/2014/12/21/plain-text-configuration-gnome.html
Le terminal Gnome est malheureusement résistant à de telles modifications à cause des identifiants de profil imprévisibles: Modifiez le profil Gnome-Terminal à partir de la ligne de commande le 18.04
Les raccourcis clavier ne sont pas stockés à un endroit unique
En fonction de la version de votre distribution, l'application de raccourcis clavier peut s'appeler différentes choses dans l'interface graphique, mais sur la ligne de commande, elle doit s'appeler 'gnome-keybinding-properties'. Il se trouve que cette petite application ordonnée rassemble tous les raccourcis en un seul endroit pratique pour les utilisateurs.
Puisqu'il n'existe aucun outil d'exportation/importation en un clic pour les liaisons de clé dans Ubuntu, j'en ai écrit un en python:
Une exportation extrait les paramètres du système. Essentiellement, il contient une liste de tous les emplacements de liaison de clé est codé en dur dans un dictionnaire dans le script. Le script énumère la liste et exécute la commande "gconftool-2 --get [emplacement]" pour chaque clé et stocke la valeur dans le dictionnaire avec la clé. Ensuite, lorsque vous spécifiez l'emplacement d'enregistrement des paramètres, le dictionnaire est enregistré dans le fichier au format JSON.
Un script d'importation inverse ce processus. Il charge le dictionnaire à partir du fichier json. Ensuite, il énumère ces éléments et exécute la commande "gconftool-2 --type string --set [location] [valeur]" pour restaurer tous les paramètres enregistrés.
Un coup à chaque extrémité et il enregistre/restaure chaque raccourci clavier sans toucher aucun des autres paramètres de configuration du système.
Les seules dépendances pour ces scripts sont:
Python est nécessaire pour exécuter le script, gconftool-2 est utilisé pour obtenir/définir les paramètres, zenity est nécessaire pour les dialogues de chargement/enregistrement de fichiers.
J'ai créé une entrée sur Ubuntu Brainstorm et je progresse maintenant pour que cette fonctionnalité soit introduite dans le menu de l'interface graphique 'gnome-keybinding-properties'.
Mise à jour:
J'ai mis à jour la combinaison des scripts d'importation et d'exportation, une fonctionnalité de ligne de commande complète (y compris --help info) et la rendant compatible à la fois avec python2x et python3k. En outre, ajout du lien vers l'idée de brainstorming Ubuntu .
Dans 11.10, sous Gnome classic, j'ai trouvé un ensemble de répertoires (Custom0, Custom1 ...) sous
$HOME/.gconf/desktop/gnome/keybindings
J'ai copié ces répertoires dans le même dossier dans une nouvelle installation 12.04 (exécutée à nouveau avec Gnome fallback), déconnecté et reconnecté. Les raccourcis clavier se sont un peu brouillés en transition (il est arrivé quelque chose de drôle au modificateur SUPER), mais sinon ils étaient là.
La réponse acceptée pose un léger problème, car elle ne peut pas gérer les commandes personnalisées contenant des guillemets. J'ai seulement modifié le traitement des commandes personnalisées pour générer une sortie correcte.
#!/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);
}