Где хранятся горячие клавиши GNOME?

Я обычно загружаю новую версию для каждой версии, чтобы сохранить мою ОС свежей, сохраняя последнюю версию на другом разделе в качестве резервной. Я также использую множество пользовательских сопоставлений клавиш.

Я выяснил, как передать большую часть моей конфигурации в разных системах до сих пор, но я не могу понять, где хранятся пользовательские сочетания клавиш.

Кто-нибудь знает, где гном их ставит? Имеются ли файлы пользовательских конфигураций (то есть, ~ /) и системный config (то есть / etc)?

47
задан 27 February 2011 в 14:55

45 ответов

Ubuntu изменился с тех пор, как были написаны другие ответы на этот вопрос.

Перемещения клавиш переместились из gconf в dconf. Gconf сохраняет свои данные в xml-файлах и к ним обращаются gconf-editor и gconf-tool2. Dconf сохраняет свои данные в двоичном формате и к ним обращаются dconf-editor и gsettings.

Уменьшено количество мест, в которых хранятся ключевые слова. В настоящее время существует централизованный путь dconf для хранения привязок клавиш менеджера окон (org.gnome.desktop.wm.keybindings). Существуют файлы сопоставления в каталоге /usr/share/gnome-control-center/keybindings/, которые показывают, как они применяются на основе используемого вами диспетчера окон (compiz или metacity).

Второй набор привязок ключей, не связанных с оконным менеджером хранится в пути dconf org.gnome.settings-daemon.plugins.media-keys

Существует третий набор привязок клавиш, связанных с кнопками питания, которые сохраняются в пути dconf org.gnome.settings-daemon.plugins.power. В настоящее время есть ошибка в графическом интерфейсе, который позволяет настраивать привязки клавиш. Он не знает об этих настройках. У меня есть клавиша «sleep» на моей клавиатуре. Если я хочу переназначить его для других функций, я должен отключить настройку в org.gnome.settings-daemon.plugins.power вручную. GUI не делает это для меня (хотя он отлично назначает новую функциональность).

Другой морщин - это привязки пользовательских клавиш. Они хранятся в dconf с использованием перемещаемой схемы. Это делается так, потому что их произвольное число. Разумный подход, но он делает листинг или изменяет их с помощью командной строки сложнее, чем это должно быть.

Я также узнал, что графический интерфейс, который позволяет назначать привязки клавиш, ограничен тем, что меня раздражает. Графический интерфейс позволяет точно привязать одно ключевое слово к каждому действию. В dconf вы можете установить массив привязок для одного действия. Это полезно для меня. Например, мне нравится, чтобы действие «закрыть окно» было назначено на традиционный Alt-F4, а также на более легкую нажатие одной кнопки на моем ключевом блоке.

Я написал сценарий Perl для сброса все привязки к CSV-файлу или восстановление их из файла csv. Например, чтобы сбросить привязки клавиш, которые вы можете использовать:

./keybindings.pl -e /tmp/keys.csv

, и для их восстановления вы можете использовать:

./keybindings.pl -i /tmp/keys.csv

[ f1]

Это включает в себя исправление пользователя2589537, чтобы разрешать в них команды с кавычками.

38
ответ дан 25 May 2018 в 23:00

Ubuntu изменился с тех пор, как были написаны другие ответы на этот вопрос.

Перемещения клавиш переместились из gconf в dconf. Gconf сохраняет свои данные в xml-файлах и к ним обращаются gconf-editor и gconf-tool2. Dconf сохраняет свои данные в двоичном формате и к ним обращаются dconf-editor и gsettings.

Уменьшено количество мест, в которых хранятся ключевые слова. В настоящее время существует централизованный путь dconf для хранения привязок клавиш менеджера окон (org.gnome.desktop.wm.keybindings). Существуют файлы сопоставления в каталоге /usr/share/gnome-control-center/keybindings/, которые показывают, как они применяются на основе используемого вами диспетчера окон (compiz или metacity).

Второй набор привязок ключей, не связанных с оконным менеджером хранится в пути dconf org.gnome.settings-daemon.plugins.media-keys

Существует третий набор привязок клавиш, связанных с кнопками питания, которые сохраняются в пути dconf org.gnome.settings-daemon.plugins.power. В настоящее время есть ошибка в графическом интерфейсе, который позволяет настраивать привязки клавиш. Он не знает об этих настройках. У меня есть клавиша «sleep» на моей клавиатуре. Если я хочу переназначить его для других функций, я должен отключить настройку в org.gnome.settings-daemon.plugins.power вручную. GUI не делает это для меня (хотя он отлично назначает новую функциональность).

Другой морщин - это привязки пользовательских клавиш. Они хранятся в dconf с использованием перемещаемой схемы. Это делается так, потому что их произвольное число. Разумный подход, но он делает листинг или изменяет их с помощью командной строки сложнее, чем это должно быть.

Я также узнал, что графический интерфейс, который позволяет назначать привязки клавиш, ограничен тем, что меня раздражает. Графический интерфейс позволяет точно привязать одно ключевое слово к каждому действию. В dconf вы можете установить массив привязок для одного действия. Это полезно для меня. Например, мне нравится, чтобы действие «закрыть окно» было назначено на традиционный Alt-F4, а также на более легкую нажатие одной кнопки на моем ключевом блоке.

Я написал сценарий Perl для сброса все привязки к CSV-файлу или восстановление их из файла csv. Например, чтобы сбросить привязки клавиш, которые вы можете использовать:

./keybindings.pl -e /tmp/keys.csv

, и для их восстановления вы можете использовать:

./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); }

Это включает в себя исправление пользователя2589537, чтобы разрешать в них команды с кавычками.

39
ответ дан 25 July 2018 в 22:29

Ubuntu изменился с тех пор, как были написаны другие ответы на этот вопрос.

Перемещения клавиш переместились из gconf в dconf. Gconf сохраняет свои данные в xml-файлах и к ним обращаются gconf-editor и gconf-tool2. Dconf сохраняет свои данные в двоичном формате и к ним обращаются dconf-editor и gsettings.

Уменьшено количество мест, в которых хранятся ключевые слова. В настоящее время существует централизованный путь dconf для хранения привязок клавиш менеджера окон (org.gnome.desktop.wm.keybindings). Существуют файлы сопоставления в каталоге /usr/share/gnome-control-center/keybindings/, которые показывают, как они применяются на основе используемого вами диспетчера окон (compiz или metacity).

Второй набор привязок ключей, не связанных с оконным менеджером хранится в пути dconf org.gnome.settings-daemon.plugins.media-keys

Существует третий набор привязок клавиш, связанных с кнопками питания, которые сохраняются в пути dconf org.gnome.settings-daemon.plugins.power. В настоящее время есть ошибка в графическом интерфейсе, который позволяет настраивать привязки клавиш. Он не знает об этих настройках. У меня есть клавиша «sleep» на моей клавиатуре. Если я хочу переназначить его для других функций, я должен отключить настройку в org.gnome.settings-daemon.plugins.power вручную. GUI не делает это для меня (хотя он отлично назначает новую функциональность).

Другой морщин - это привязки пользовательских клавиш. Они хранятся в dconf с использованием перемещаемой схемы. Это делается так, потому что их произвольное число. Разумный подход, но он делает листинг или изменяет их с помощью командной строки сложнее, чем это должно быть.

Я также узнал, что графический интерфейс, который позволяет назначать привязки клавиш, ограничен тем, что меня раздражает. Графический интерфейс позволяет точно привязать одно ключевое слово к каждому действию. В dconf вы можете установить массив привязок для одного действия. Это полезно для меня. Например, мне нравится, чтобы действие «закрыть окно» было назначено на традиционный Alt-F4, а также на более легкую нажатие одной кнопки на моем ключевом блоке.

Я написал сценарий Perl для сброса все привязки к CSV-файлу или восстановление их из файла csv. Например, чтобы сбросить привязки клавиш, которые вы можете использовать:

./keybindings.pl -e /tmp/keys.csv

, и для их восстановления вы можете использовать:

./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); }

Это включает в себя исправление пользователя2589537, чтобы разрешать в них команды с кавычками.

39
ответ дан 31 July 2018 в 11:30

Ubuntu изменился с тех пор, как были написаны другие ответы на этот вопрос.

Перемещения клавиш переместились из gconf в dconf. Gconf сохраняет свои данные в xml-файлах и к ним обращаются gconf-editor и gconf-tool2. Dconf сохраняет свои данные в двоичном формате и к ним обращаются dconf-editor и gsettings.

Уменьшено количество мест, в которых хранятся ключевые слова. В настоящее время существует централизованный путь dconf для хранения привязок клавиш менеджера окон (org.gnome.desktop.wm.keybindings). Существуют файлы сопоставления в каталоге /usr/share/gnome-control-center/keybindings/, которые показывают, как они применяются на основе используемого вами диспетчера окон (compiz или metacity).

Второй набор привязок ключей, не связанных с оконным менеджером хранится в пути dconf org.gnome.settings-daemon.plugins.media-keys

Существует третий набор привязок клавиш, связанных с кнопками питания, которые сохраняются в пути dconf org.gnome.settings-daemon.plugins.power. В настоящее время есть ошибка в графическом интерфейсе, который позволяет настраивать привязки клавиш. Он не знает об этих настройках. У меня есть клавиша «sleep» на моей клавиатуре. Если я хочу переназначить его для других функций, я должен отключить настройку в org.gnome.settings-daemon.plugins.power вручную. GUI не делает это для меня (хотя он отлично назначает новую функциональность).

Другой морщин - это привязки пользовательских клавиш. Они хранятся в dconf с использованием перемещаемой схемы. Это делается так, потому что их произвольное число. Разумный подход, но он делает листинг или изменяет их с помощью командной строки сложнее, чем это должно быть.

Я также узнал, что графический интерфейс, который позволяет назначать привязки клавиш, ограничен тем, что меня раздражает. Графический интерфейс позволяет точно привязать одно ключевое слово к каждому действию. В dconf вы можете установить массив привязок для одного действия. Это полезно для меня. Например, мне нравится, чтобы действие «закрыть окно» было назначено на традиционный Alt-F4, а также на более легкую нажатие одной кнопки на моем ключевом блоке.

Я написал сценарий Perl для сброса все привязки к CSV-файлу или восстановление их из файла csv. Например, чтобы сбросить привязки клавиш, которые вы можете использовать:

./keybindings.pl -e /tmp/keys.csv

, и для их восстановления вы можете использовать:

./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); }

Это включает в себя исправление пользователя2589537, чтобы разрешать в них команды с кавычками.

39
ответ дан 2 August 2018 в 03:55

Ubuntu изменился с тех пор, как были написаны другие ответы на этот вопрос.

Перемещения клавиш переместились из gconf в dconf. Gconf сохраняет свои данные в xml-файлах и к ним обращаются gconf-editor и gconf-tool2. Dconf сохраняет свои данные в двоичном формате и к ним обращаются dconf-editor и gsettings.

Уменьшено количество мест, в которых хранятся ключевые слова. В настоящее время существует централизованный путь dconf для хранения привязок клавиш менеджера окон (org.gnome.desktop.wm.keybindings). В каталоге /usr/share/gnome-control-center/keybindings/ есть файлы сопоставления, которые показывают, как они применяются на основе используемого вами диспетчера окон (compiz или metacity).

Второй набор привязок ключей, не связанных с оконным менеджером сохраняется в пути dconf org.gnome.settings-daemon.plugins.media-keys

Существует третий набор привязок клавиш, связанных с кнопками питания, которые сохраняются в пути dconf org.gnome.settings-daemon.plugins.power. В настоящее время есть ошибка в графическом интерфейсе, который позволяет настраивать привязки клавиш. Он не знает об этих настройках. У меня есть клавиша «sleep» на моей клавиатуре. Если я хочу переназначить его для других функций, я должен отключить настройку в org.gnome.settings-daemon.plugins.power вручную. GUI не делает этого для меня (хотя он отлично назначает новую функциональность).

Другой морщин - это привязки пользовательских клавиш. Они хранятся в dconf с использованием перемещаемой схемы. Это делается так, потому что их произвольное число. Разумный подход, но он делает листинг или изменяет их с помощью командной строки сложнее, чем это должно быть.

Я также узнал, что графический интерфейс, который позволяет назначать привязки клавиш, ограничен таким образом, что меня раздражает. Графический интерфейс позволяет точно привязать одно ключевое слово к каждому действию. В dconf вы можете установить массив привязок для одного действия. Это полезно для меня. Например, мне нравится иметь действие «close-window», назначенное на традиционный Alt-F4, а также на более легкую нажатие одной кнопки на моем ключевом блоке.

Я написал сценарий Perl для дампа все привязки к CSV-файлу или восстановление их из файла csv. Например, чтобы сбросить привязки клавиш, которые вы можете использовать:

./keybindings.pl -e /tmp/keys.csv

, и для их восстановления вы можете использовать:

./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);
}

Это включает в себя исправление user2589537 , чтобы разрешать в них команды с кавычками.

39
ответ дан 4 August 2018 в 19:59

Ubuntu изменился с тех пор, как были написаны другие ответы на этот вопрос.

Перемещения клавиш переместились из gconf в dconf. Gconf сохраняет свои данные в xml-файлах и к ним обращаются gconf-editor и gconf-tool2. Dconf сохраняет свои данные в двоичном формате и к ним обращаются dconf-editor и gsettings.

Уменьшено количество мест, в которых хранятся ключевые слова. В настоящее время существует централизованный путь dconf для хранения привязок клавиш менеджера окон (org.gnome.desktop.wm.keybindings). В каталоге /usr/share/gnome-control-center/keybindings/ есть файлы сопоставления, которые показывают, как они применяются на основе используемого вами диспетчера окон (compiz или metacity).

Второй набор привязок ключей, не связанных с оконным менеджером сохраняется в пути dconf org.gnome.settings-daemon.plugins.media-keys

Существует третий набор привязок клавиш, связанных с кнопками питания, которые сохраняются в пути dconf org.gnome.settings-daemon.plugins.power. В настоящее время есть ошибка в графическом интерфейсе, который позволяет настраивать привязки клавиш. Он не знает об этих настройках. У меня есть клавиша «sleep» на моей клавиатуре. Если я хочу переназначить его для других функций, я должен отключить настройку в org.gnome.settings-daemon.plugins.power вручную. GUI не делает этого для меня (хотя он отлично назначает новую функциональность).

Другой морщин - это привязки пользовательских клавиш. Они хранятся в dconf с использованием перемещаемой схемы. Это делается так, потому что их произвольное число. Разумный подход, но он делает листинг или изменяет их с помощью командной строки сложнее, чем это должно быть.

Я также узнал, что графический интерфейс, который позволяет назначать привязки клавиш, ограничен таким образом, что меня раздражает. Графический интерфейс позволяет точно привязать одно ключевое слово к каждому действию. В dconf вы можете установить массив привязок для одного действия. Это полезно для меня. Например, мне нравится иметь действие «close-window», назначенное на традиционный Alt-F4, а также на более легкую нажатие одной кнопки на моем ключевом блоке.

Я написал сценарий Perl для дампа все привязки к CSV-файлу или восстановление их из файла csv. Например, чтобы сбросить привязки клавиш, которые вы можете использовать:

./keybindings.pl -e /tmp/keys.csv

, и для их восстановления вы можете использовать:

./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);
}

Это включает в себя исправление user2589537 , чтобы разрешать в них команды с кавычками.

39
ответ дан 6 August 2018 в 04:01

Ubuntu изменился с тех пор, как были написаны другие ответы на этот вопрос.

Перемещения клавиш переместились из gconf в dconf. Gconf сохраняет свои данные в xml-файлах и к ним обращаются gconf-editor и gconf-tool2. Dconf сохраняет свои данные в двоичном формате и к ним обращаются dconf-editor и gsettings.

Уменьшено количество мест, в которых хранятся ключевые слова. В настоящее время существует централизованный путь dconf для хранения привязок клавиш менеджера окон (org.gnome.desktop.wm.keybindings). В каталоге /usr/share/gnome-control-center/keybindings/ есть файлы сопоставления, которые показывают, как они применяются на основе используемого вами диспетчера окон (compiz или metacity).

Второй набор привязок ключей, не связанных с оконным менеджером сохраняется в пути dconf org.gnome.settings-daemon.plugins.media-keys

Существует третий набор привязок клавиш, связанных с кнопками питания, которые сохраняются в пути dconf org.gnome.settings-daemon.plugins.power. В настоящее время есть ошибка в графическом интерфейсе, который позволяет настраивать привязки клавиш. Он не знает об этих настройках. У меня есть клавиша «sleep» на моей клавиатуре. Если я хочу переназначить его для других функций, я должен отключить настройку в org.gnome.settings-daemon.plugins.power вручную. GUI не делает этого для меня (хотя он отлично назначает новую функциональность).

Другой морщин - это привязки пользовательских клавиш. Они хранятся в dconf с использованием перемещаемой схемы. Это делается так, потому что их произвольное число. Разумный подход, но он делает листинг или изменяет их с помощью командной строки сложнее, чем это должно быть.

Я также узнал, что графический интерфейс, который позволяет назначать привязки клавиш, ограничен таким образом, что меня раздражает. Графический интерфейс позволяет точно привязать одно ключевое слово к каждому действию. В dconf вы можете установить массив привязок для одного действия. Это полезно для меня. Например, мне нравится иметь действие «close-window», назначенное на традиционный Alt-F4, а также на более легкую нажатие одной кнопки на моем ключевом блоке.

Я написал сценарий Perl для дампа все привязки к CSV-файлу или восстановление их из файла csv. Например, чтобы сбросить привязки клавиш, которые вы можете использовать:

./keybindings.pl -e /tmp/keys.csv

, и для их восстановления вы можете использовать:

./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);
}

Это включает в себя исправление user2589537 , чтобы разрешать в них команды с кавычками.

39
ответ дан 7 August 2018 в 21:59

Ubuntu изменился с тех пор, как были написаны другие ответы на этот вопрос.

Перемещения клавиш переместились из gconf в dconf. Gconf сохраняет свои данные в xml-файлах и к ним обращаются gconf-editor и gconf-tool2. Dconf сохраняет свои данные в двоичном формате и к ним обращаются dconf-editor и gsettings.

Уменьшено количество мест, в которых хранятся ключевые слова. В настоящее время существует централизованный путь dconf для хранения привязок клавиш менеджера окон (org.gnome.desktop.wm.keybindings). В каталоге /usr/share/gnome-control-center/keybindings/ есть файлы сопоставления, которые показывают, как они применяются на основе используемого вами диспетчера окон (compiz или metacity).

Второй набор привязок ключей, не связанных с оконным менеджером сохраняется в пути dconf org.gnome.settings-daemon.plugins.media-keys

Существует третий набор привязок клавиш, связанных с кнопками питания, которые сохраняются в пути dconf org.gnome.settings-daemon.plugins.power. В настоящее время есть ошибка в графическом интерфейсе, который позволяет настраивать привязки клавиш. Он не знает об этих настройках. У меня есть клавиша «sleep» на моей клавиатуре. Если я хочу переназначить его для других функций, я должен отключить настройку в org.gnome.settings-daemon.plugins.power вручную. GUI не делает этого для меня (хотя он отлично назначает новую функциональность).

Другой морщин - это привязки пользовательских клавиш. Они хранятся в dconf с использованием перемещаемой схемы. Это делается так, потому что их произвольное число. Разумный подход, но он делает листинг или изменяет их с помощью командной строки сложнее, чем это должно быть.

Я также узнал, что графический интерфейс, который позволяет назначать привязки клавиш, ограничен таким образом, что меня раздражает. Графический интерфейс позволяет точно привязать одно ключевое слово к каждому действию. В dconf вы можете установить массив привязок для одного действия. Это полезно для меня. Например, мне нравится иметь действие «close-window», назначенное на традиционный Alt-F4, а также на более легкую нажатие одной кнопки на моем ключевом блоке.

Я написал сценарий Perl для дампа все привязки к CSV-файлу или восстановление их из файла csv. Например, чтобы сбросить привязки клавиш, которые вы можете использовать:

./keybindings.pl -e /tmp/keys.csv

, и для их восстановления вы можете использовать:

./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);
}

Это включает в себя исправление user2589537 , чтобы разрешать в них команды с кавычками.

39
ответ дан 10 August 2018 в 10:14

Ubuntu изменился с тех пор, как были написаны другие ответы на этот вопрос.

Перемещения клавиш переместились из gconf в dconf. Gconf сохраняет свои данные в xml-файлах и к ним обращаются gconf-editor и gconf-tool2. Dconf сохраняет свои данные в двоичном формате и к ним обращаются dconf-editor и gsettings.

Уменьшено количество мест, в которых хранятся ключевые слова. В настоящее время существует централизованный путь dconf для хранения привязок клавиш менеджера окон (org.gnome.desktop.wm.keybindings). В каталоге /usr/share/gnome-control-center/keybindings/ есть файлы сопоставления, которые показывают, как они применяются на основе используемого вами диспетчера окон (compiz или metacity).

Второй набор привязок ключей, не связанных с оконным менеджером сохраняется в пути dconf org.gnome.settings-daemon.plugins.media-keys

Существует третий набор привязок клавиш, связанных с кнопками питания, которые сохраняются в пути dconf org.gnome.settings-daemon.plugins.power. В настоящее время есть ошибка в графическом интерфейсе, который позволяет настраивать привязки клавиш. Он не знает об этих настройках. У меня есть клавиша «sleep» на моей клавиатуре. Если я хочу переназначить его для других функций, я должен отключить настройку в org.gnome.settings-daemon.plugins.power вручную. GUI не делает этого для меня (хотя он отлично назначает новую функциональность).

Другой морщин - это привязки пользовательских клавиш. Они хранятся в dconf с использованием перемещаемой схемы. Это делается так, потому что их произвольное число. Разумный подход, но он делает листинг или изменяет их с помощью командной строки сложнее, чем это должно быть.

Я также узнал, что графический интерфейс, который позволяет назначать привязки клавиш, ограничен таким образом, что меня раздражает. Графический интерфейс позволяет точно привязать одно ключевое слово к каждому действию. В dconf вы можете установить массив привязок для одного действия. Это полезно для меня. Например, мне нравится иметь действие «close-window», назначенное на традиционный Alt-F4, а также на более легкую нажатие одной кнопки на моем ключевом блоке.

Я написал сценарий Perl для дампа все привязки к CSV-файлу или восстановление их из файла csv. Например, чтобы сбросить привязки клавиш, которые вы можете использовать:

./keybindings.pl -e /tmp/keys.csv

, и для их восстановления вы можете использовать:

./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);
}

Это включает в себя исправление user2589537 , чтобы разрешать в них команды с кавычками.

39
ответ дан 13 August 2018 в 16:37

Ярлыки клавиш не хранятся ни в одном месте

В зависимости от вашей дистрибутивной версии приложение ярлыков клавиатуры может быть вызвано разными вещами в графическом интерфейсе, но в командной строке оно должно называться «гном» -keybinding-свойств. Оказывается, что это аккуратное небольшое приложение объединяет все ярлыки в одно удобное место для редактирования пользователями.

Так как инструмент для экспорта / импорта одним щелчком мыши существует для привязки клавиш в Ubuntu, я написал один в python:

Вот ссылка на скрипт

Экспорт выводит настройки из системы. По существу, он содержит список всех мест привязки клавиш, жестко закодированных в словаре в скрипте. Сценарий отображает список и запускает команду «gconftool-2 --get [location]» для каждого ключа и сохраняет значение в словаре вместе с ключом. Затем, когда вы указываете местоположение для сохранения настроек, он сохраняет словарь в файле в формате json.

Сценарий импорта отменяет этот процесс. Он загружает словарь из json-файла. Затем он перечисляет их и запускает команду «gconftool-2 - type string --set [location] [value]», чтобы восстановить все сохраненные настройки.

Один снимок с обоих концов и он сохраняет /! восстанавливает каждую комбинацию клавиш, не касаясь каких-либо других параметров конфигурации системы.

Единственными зависимостями для этих скриптов являются:

python (протестировано и работает в версиях 2.6, 2.7 и 3.1 ) gconftool-2 (входит в стандартную комплектацию с установкой Ubuntu) zenity (входит в стандартную комплектацию с установкой Ubuntu)

Для выполнения скрипта необходим Python, gconftool-2 используется для получения / установки настроек, zenity - необходимые для файлов загрузки / сохранения диалогов gui.

Вот ссылка на скрипт , и я добиваюсь прогресса в том, чтобы эта функция была введена в меню GUI-gb-keybinding-properties .

Ярлыки клавиш не хранятся ни в одном месте

Я обновил комбинированные сценарии импорта и экспорта в одну, добавленную полную функциональность командной строки (включая --help info) и сделало его совместимым как для python2x, так и для python3k. Также добавлена ​​ссылка на идею Ubuntu Brainstorm.

15
ответ дан 25 May 2018 в 23:00
  • 1
    Мозговой штурм вряд ли является хорошим местом для реальных улучшений Ubuntu - только 10 лучших вопросов на самом деле привлекают внимание разработчиков. Я предлагаю вам найти страницу Launchpad для gnome-keybinding-properties и опубликовать патч со своим скриптом. – Oxwivi 11 March 2011 в 09:43
  • 2
    Ваш скрипт хорош для ярлыков, перечисленных в / с помощью gconftool-2 / gconf-editor ... и я полагаю, что это зависит от того, что вызывает ярлык клавиатуры GNOME ... но он не собирает ярлыки для всей системы, добавленные по Keyboard Shortcuts, т.е. gnome-keybinding-properties ... и другие сочетания клавиш, добавленные, например, Xbindkeys ... поэтому я подозреваю, что gconf 'не там, где общие узлы быстрого доступа sysetem «хранятся», но что это интерфейс чего-то / где-то глубже ... (Я искал это место .. :). возможно, мне просто нужно сохранить 3 'экспортированных' списка на данный момент ... – Peter.O 11 March 2011 в 09:51
  • 3
    @ fred.bear Я уверен, что все они хранятся в gconf, но я обнаружил, что новые привязки клавиш добавляются в свойства gnome-keybinding при изменении значений по умолчанию на панели управления. Текущий скрипт будет выполнять ярлыки по умолчанию, найденные в графическом интерфейсе, но он не сможет поддерживать все ярлыки без дальнейшей интеграции в графический интерфейс. В настоящее время для этого открыт план, поэтому я пытаюсь связаться с другим разработчиком, который предложил это, чтобы разобраться в деталях на панели запуска. На данный момент ... это работает. – Evan Plaice 14 March 2011 в 09:32

Как выполнить резервное копирование настроек dconf, таких как быстрые клавиши

Дамп их всех в файл:
dconf dump / >~/.config/dconf/user.conf
Откройте этот файл в текстовом редакторе и выберите нужные вам параметры:
editor ~/.config/dconf/user.conf
Если вы используете Vim, вам понадобится подсветка синтаксиса. Вы скоро спросите себя, что это <Primary>. Если вы не знаете имя параметра, но знаете, как его изменить из графического интерфейса, например unity-control-center, запустите:
dconf watch /
, а затем измените их. Точная настройка появится на терминале. Когда вы хотите восстановить эти настройки, запустите:
dconf load / <~/.config/dconf/user.conf
Git отслеживает файл конфигурации, чтобы никогда не потерять его. https://github.com/andsens/homeshick - мой текущий любимый метод.

Проверено на Ubuntu 15.10. Совет адаптирован из: http://catern.com/2014/12/21/plain-text-configuration-gnome.html

14
ответ дан 25 May 2018 в 23:00

В 11.10 запуске Gnome classic я нашел набор каталогов (Custom0, Custom1 ...) в

$HOME/.gconf/desktop/gnome/keybindings

Я скопировал эти каталоги в одну и ту же папку в чистой установке 12.04 (снова работает с Gnome fallback), вышли из системы и вошли в систему снова. Ключевые комбинации немного перепутались с переходом (что-то смешное произошло с модификатором SUPER), но в остальном они были там.

3
ответ дан 25 May 2018 в 23:00

Существует небольшая проблема с принятым ответом, поскольку он не может обрабатывать пользовательские команды с кавычками в них. Я только изменил обработку пользовательских команд для генерации правильного вывода.

#!/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);
}
2
ответ дан 25 May 2018 в 23:00
  • 1
    Отличный первый ответ на AskUbuntu! Поздравляем! – Fabby 26 November 2014 в 03:18
  • 2
    Я включил ваши изменения в принятый ответ. – Stephen Ostermiller 6 May 2015 в 22:16

Ярлыки клавиш не хранятся ни в одном месте

В зависимости от вашей дистрибутивной версии приложение ярлыков клавиатуры может быть вызвано разными вещами в графическом интерфейсе, но в командной строке оно должно называться «гном» -keybinding-свойств. Оказывается, что это аккуратное небольшое приложение объединяет все ярлыки в одно удобное место для редактирования пользователями.

Так как инструмент для экспорта / импорта одним щелчком мыши существует для привязки клавиш в Ubuntu, я написал один в python:

Вот ссылка на скрипт

Экспорт выводит настройки из системы. По существу, он содержит список всех мест привязки клавиш, жестко закодированных в словаре в скрипте. Сценарий отображает список и запускает команду «gconftool-2 --get [location]» для каждого ключа и сохраняет значение в словаре вместе с ключом. Затем, когда вы указываете местоположение для сохранения настроек, он сохраняет словарь в файле в формате json.

Сценарий импорта отменяет этот процесс. Он загружает словарь из json-файла. Затем он перечисляет их и запускает команду «gconftool-2 - type string --set [location] [value]», чтобы восстановить все сохраненные настройки.

Один снимок с обоих концов и он сохраняет /! восстанавливает каждую комбинацию клавиш, не касаясь каких-либо других параметров конфигурации системы.

Единственными зависимостями для этих скриптов являются:

python (протестировано и работает в версиях 2.6, 2.7 и 3.1 ) gconftool-2 (входит в стандартную комплектацию с установкой Ubuntu) zenity (входит в стандартную комплектацию с установкой Ubuntu)

Для выполнения скрипта необходим Python, gconftool-2 используется для получения / установки настроек, zenity - необходимые для файлов загрузки / сохранения диалогов gui.

Вот ссылка на скрипт , и я добиваюсь прогресса в том, чтобы эта функция была введена в меню GUI-gb-keybinding-properties .

Ярлыки клавиш не хранятся ни в одном месте

Я обновил комбинированные сценарии импорта и экспорта в одну, добавленную полную функциональность командной строки (включая --help info) и сделало его совместимым как для python2x, так и для python3k. Также добавлена ​​ссылка на идею Ubuntu Brainstorm.

15
ответ дан 25 July 2018 в 22:29
  • 1
    Мозговой штурм вряд ли является хорошим местом для реальных улучшений Ubuntu - только 10 лучших вопросов на самом деле привлекают внимание разработчиков. Я предлагаю вам найти страницу Launchpad для gnome-keybinding-properties и опубликовать патч со своим скриптом. – Oxwivi 11 March 2011 в 09:43
  • 2
    Ваш скрипт хорош для ярлыков, перечисленных в / с помощью gconftool-2 / gconf-editor ... и я полагаю, что это зависит от того, что вызывает ярлык клавиатуры GNOME ... но он не собирает ярлыки для всей системы, добавленные по Keyboard Shortcuts, т.е. gnome-keybinding-properties ... и другие сочетания клавиш, добавленные, например, Xbindkeys ... поэтому я подозреваю, что gconf 'не там, где общие узлы быстрого доступа sysetem «хранятся», но что это интерфейс чего-то / где-то глубже ... (Я искал это место .. :). возможно, мне просто нужно сохранить 3 'экспортированных' списка на данный момент ... – Peter.O 11 March 2011 в 09:51
  • 3
    @ fred.bear Я уверен, что все они хранятся в gconf, но я обнаружил, что новые привязки клавиш добавляются в свойства gnome-keybinding при изменении значений по умолчанию на панели управления. Текущий скрипт будет выполнять ярлыки по умолчанию, найденные в графическом интерфейсе, но он не сможет поддерживать все ярлыки без дальнейшей интеграции в графический интерфейс. В настоящее время для этого открыт план, поэтому я пытаюсь связаться с другим разработчиком, который предложил это, чтобы разобраться в деталях на панели запуска. На данный момент ... это работает. – Evan Plaice 14 March 2011 в 09:32

В 11.10 запуске Gnome classic я нашел набор каталогов (Custom0, Custom1 ...) в

$HOME/.gconf/desktop/gnome/keybindings

Я скопировал эти каталоги в одну и ту же папку в чистой установке 12.04 (снова работает с Gnome fallback), вышли из системы и вошли в систему снова. Ключевые комбинации немного перепутались с переходом (что-то смешное произошло с модификатором SUPER), но в остальном они были там.

3
ответ дан 25 July 2018 в 22:29

Как выполнить резервное копирование настроек dconf, таких как быстрые клавиши

Дамп их всех в файл: dconf dump / >~/.config/dconf/user.conf Откройте этот файл в текстовом редакторе и выберите нужные вам параметры: editor ~/.config/dconf/user.conf Если вы используете Vim, вам понадобится подсветка синтаксиса. Вы скоро спросите себя, что это <Primary>. Если вы не знаете имя параметра, но знаете, как его изменить из графического интерфейса, например unity-control-center, запустите: dconf watch / , а затем измените их. Точная настройка появится на терминале. Когда вы хотите восстановить эти настройки, запустите: dconf load / <~/.config/dconf/user.conf Git отслеживает файл конфигурации, чтобы никогда не потерять его. https://github.com/andsens/homeshick - мой текущий любимый метод.

Проверено на Ubuntu 15.10. Совет адаптирован из: http://catern.com/2014/12/21/plain-text-configuration-gnome.html

14
ответ дан 25 July 2018 в 22:29

Существует небольшая проблема с принятым ответом, поскольку он не может обрабатывать пользовательские команды с кавычками в них. Я только изменил обработку пользовательских команд для генерации правильного вывода.

#!/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); }
2
ответ дан 25 July 2018 в 22:29
  • 1
    Отличный первый ответ на AskUbuntu! Поздравляем! – Fabby 26 November 2014 в 03:18
  • 2
    Я включил ваши изменения в принятый ответ. – Stephen Ostermiller 6 May 2015 в 22:16

Ярлыки клавиш не хранятся ни в одном месте

В зависимости от вашей дистрибутивной версии приложение ярлыков клавиатуры может быть вызвано разными вещами в графическом интерфейсе, но в командной строке оно должно называться «гном» -keybinding-свойств. Оказывается, что это аккуратное небольшое приложение объединяет все ярлыки в одно удобное место для редактирования пользователями.

Так как инструмент для экспорта / импорта одним щелчком мыши существует для привязки клавиш в Ubuntu, я написал один в python:

Вот ссылка на скрипт

Экспорт выводит настройки из системы. По существу, он содержит список всех мест привязки клавиш, жестко закодированных в словаре в скрипте. Сценарий отображает список и запускает команду «gconftool-2 --get [location]» для каждого ключа и сохраняет значение в словаре вместе с ключом. Затем, когда вы указываете местоположение для сохранения настроек, он сохраняет словарь в файле в формате json.

Сценарий импорта отменяет этот процесс. Он загружает словарь из json-файла. Затем он перечисляет их и запускает команду «gconftool-2 - type string --set [location] [value]», чтобы восстановить все сохраненные настройки.

Один снимок с обоих концов и он сохраняет /! восстанавливает каждую комбинацию клавиш, не касаясь каких-либо других параметров конфигурации системы.

Единственными зависимостями для этих скриптов являются:

python (протестировано и работает в версиях 2.6, 2.7 и 3.1 ) gconftool-2 (входит в стандартную комплектацию с установкой Ubuntu) zenity (входит в стандартную комплектацию с установкой Ubuntu)

Для выполнения скрипта необходим Python, gconftool-2 используется для получения / установки настроек, zenity - необходимые для файлов загрузки / сохранения диалогов gui.

Вот ссылка на скрипт , и я добиваюсь прогресса в том, чтобы эта функция была введена в меню GUI-gb-keybinding-properties .

Ярлыки клавиш не хранятся ни в одном месте

Я обновил комбинированные сценарии импорта и экспорта в одну, добавленную полную функциональность командной строки (включая --help info) и сделало его совместимым как для python2x, так и для python3k. Также добавлена ​​ссылка на идею Ubuntu Brainstorm.

15
ответ дан 31 July 2018 в 11:30
  • 1
    Мозговой штурм вряд ли является хорошим местом для реальных улучшений Ubuntu - только 10 лучших вопросов на самом деле привлекают внимание разработчиков. Я предлагаю вам найти страницу Launchpad для gnome-keybinding-properties и опубликовать патч со своим скриптом. – Oxwivi 11 March 2011 в 09:43
  • 2
    Ваш скрипт хорош для ярлыков, перечисленных в / с помощью gconftool-2 / gconf-editor ... и я полагаю, что это зависит от того, что вызывает ярлык клавиатуры GNOME ... но он не собирает ярлыки для всей системы, добавленные по Keyboard Shortcuts, т.е. gnome-keybinding-properties ... и другие сочетания клавиш, добавленные, например, Xbindkeys ... поэтому я подозреваю, что gconf 'не там, где общие узлы быстрого доступа sysetem «хранятся», но что это интерфейс чего-то / где-то глубже ... (Я искал это место .. :). возможно, мне просто нужно сохранить 3 'экспортированных' списка на данный момент ... – Peter.O 11 March 2011 в 09:51
  • 3
    @ fred.bear Я уверен, что все они хранятся в gconf, но я обнаружил, что новые привязки клавиш добавляются в свойства gnome-keybinding при изменении значений по умолчанию на панели управления. Текущий скрипт будет выполнять ярлыки по умолчанию, найденные в графическом интерфейсе, но он не сможет поддерживать все ярлыки без дальнейшей интеграции в графический интерфейс. В настоящее время для этого открыт план, поэтому я пытаюсь связаться с другим разработчиком, который предложил это, чтобы разобраться в деталях на панели запуска. На данный момент ... это работает. – Evan Plaice 14 March 2011 в 09:32

В 11.10 запуске Gnome classic я нашел набор каталогов (Custom0, Custom1 ...) в

$HOME/.gconf/desktop/gnome/keybindings

Я скопировал эти каталоги в одну и ту же папку в чистой установке 12.04 (снова работает с Gnome fallback), вышли из системы и вошли в систему снова. Ключевые комбинации немного перепутались с переходом (что-то смешное произошло с модификатором SUPER), но в остальном они были там.

3
ответ дан 31 July 2018 в 11:30

Как выполнить резервное копирование настроек dconf, таких как быстрые клавиши

Дамп их всех в файл: dconf dump / >~/.config/dconf/user.conf Откройте этот файл в текстовом редакторе и выберите нужные вам параметры: editor ~/.config/dconf/user.conf Если вы используете Vim, вам понадобится подсветка синтаксиса. Вы скоро спросите себя, что это <Primary>. Если вы не знаете имя параметра, но знаете, как его изменить из графического интерфейса, например unity-control-center, запустите: dconf watch / , а затем измените их. Точная настройка появится на терминале. Когда вы хотите восстановить эти настройки, запустите: dconf load / <~/.config/dconf/user.conf Git отслеживает файл конфигурации, чтобы никогда не потерять его. https://github.com/andsens/homeshick - мой текущий любимый метод.

Проверено на Ubuntu 15.10. Совет адаптирован из: http://catern.com/2014/12/21/plain-text-configuration-gnome.html

14
ответ дан 31 July 2018 в 11:30

Существует небольшая проблема с принятым ответом, поскольку он не может обрабатывать пользовательские команды с кавычками в них. Я только изменил обработку пользовательских команд для генерации правильного вывода.

#!/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); }
2
ответ дан 31 July 2018 в 11:30
  • 1
    Отличный первый ответ на AskUbuntu! Поздравляем! – Fabby 26 November 2014 в 03:18
  • 2
    Я включил ваши изменения в принятый ответ. – Stephen Ostermiller 6 May 2015 в 22:16

Ярлыки клавиш не хранятся ни в одном месте

В зависимости от вашей дистрибутивной версии приложение ярлыков клавиатуры может быть вызвано разными вещами в графическом интерфейсе, но в командной строке оно должно называться «гном» -keybinding-свойств. Оказывается, что это аккуратное небольшое приложение объединяет все ярлыки в одно удобное место для редактирования пользователями.

Так как инструмент для экспорта / импорта одним щелчком мыши существует для привязки клавиш в Ubuntu, я написал один в python:

Вот ссылка на скрипт

Экспорт выводит настройки из системы. По существу, он содержит список всех мест привязки клавиш, жестко закодированных в словаре в скрипте. Сценарий отображает список и запускает команду «gconftool-2 --get [location]» для каждого ключа и сохраняет значение в словаре вместе с ключом. Затем, когда вы указываете местоположение для сохранения настроек, он сохраняет словарь в файле в формате json.

Сценарий импорта отменяет этот процесс. Он загружает словарь из json-файла. Затем он перечисляет их и запускает команду «gconftool-2 - type string --set [location] [value]», чтобы восстановить все сохраненные настройки.

Один снимок с обоих концов и он сохраняет /! восстанавливает каждую комбинацию клавиш, не касаясь каких-либо других параметров конфигурации системы.

Единственными зависимостями для этих скриптов являются:

python (протестировано и работает в версиях 2.6, 2.7 и 3.1 ) gconftool-2 (входит в стандартную комплектацию с установкой Ubuntu) zenity (входит в стандартную комплектацию с установкой Ubuntu)

Для выполнения скрипта необходим Python, gconftool-2 используется для получения / установки настроек, zenity - необходимые для файлов загрузки / сохранения диалогов gui.

Вот ссылка на скрипт , и я добиваюсь прогресса в том, чтобы эта функция была введена в меню GUI-gb-keybinding-properties .

Ярлыки клавиш не хранятся ни в одном месте

Я обновил комбинированные сценарии импорта и экспорта в одну, добавленную полную функциональность командной строки (включая --help info) и сделало его совместимым как для python2x, так и для python3k. Также добавлена ​​ссылка на идею Ubuntu Brainstorm.

15
ответ дан 2 August 2018 в 03:55
  • 1
    Мозговой штурм вряд ли является хорошим местом для реальных улучшений Ubuntu - только 10 лучших вопросов на самом деле привлекают внимание разработчиков. Я предлагаю вам найти страницу Launchpad для gnome-keybinding-properties и опубликовать патч со своим скриптом. – Oxwivi 11 March 2011 в 09:43
  • 2
    Ваш скрипт хорош для ярлыков, перечисленных в / с помощью gconftool-2 / gconf-editor ... и я полагаю, что это зависит от того, что вызывает ярлык клавиатуры GNOME ... но он не собирает ярлыки для всей системы, добавленные по Keyboard Shortcuts, т.е. gnome-keybinding-properties ... и другие сочетания клавиш, добавленные, например, Xbindkeys ... поэтому я подозреваю, что gconf 'не там, где общие узлы быстрого доступа sysetem «хранятся», но что это интерфейс чего-то / где-то глубже ... (Я искал это место .. :). возможно, мне просто нужно сохранить 3 'экспортированных' списка на данный момент ... – Peter.O 11 March 2011 в 09:51
  • 3
    @ fred.bear Я уверен, что все они хранятся в gconf, но я обнаружил, что новые привязки клавиш добавляются в свойства gnome-keybinding при изменении значений по умолчанию на панели управления. Текущий скрипт будет выполнять ярлыки по умолчанию, найденные в графическом интерфейсе, но он не сможет поддерживать все ярлыки без дальнейшей интеграции в графический интерфейс. В настоящее время для этого открыт план, поэтому я пытаюсь связаться с другим разработчиком, который предложил это, чтобы разобраться в деталях на панели запуска. На данный момент ... это работает. – Evan Plaice 14 March 2011 в 09:32

В 11.10 запуске Gnome classic я нашел набор каталогов (Custom0, Custom1 ...) в

$HOME/.gconf/desktop/gnome/keybindings

Я скопировал эти каталоги в одну и ту же папку в чистой установке 12.04 (снова работает с Gnome fallback), вышли из системы и вошли в систему снова. Ключевые комбинации немного перепутались с переходом (что-то смешное произошло с модификатором SUPER), но в остальном они были там.

3
ответ дан 2 August 2018 в 03:55

Как выполнить резервное копирование настроек dconf, таких как быстрые клавиши

Дамп их всех в файл: dconf dump / >~/.config/dconf/user.conf Откройте этот файл в текстовом редакторе и выберите нужные вам параметры: editor ~/.config/dconf/user.conf Если вы используете Vim, вам понадобится подсветка синтаксиса. Вы скоро спросите себя, что это <Primary>. Если вы не знаете имя параметра, но знаете, как его изменить из графического интерфейса, например unity-control-center, запустите: dconf watch / , а затем измените их. Точная настройка появится на терминале. Когда вы хотите восстановить эти настройки, запустите: dconf load / <~/.config/dconf/user.conf Git отслеживает файл конфигурации, чтобы никогда не потерять его. https://github.com/andsens/homeshick - мой текущий любимый метод.

Проверено на Ubuntu 15.10. Совет адаптирован из: http://catern.com/2014/12/21/plain-text-configuration-gnome.html

14
ответ дан 2 August 2018 в 03:55

Существует небольшая проблема с принятым ответом, поскольку он не может обрабатывать пользовательские команды с кавычками в них. Я только изменил обработку пользовательских команд для генерации правильного вывода.

#!/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); }
2
ответ дан 2 August 2018 в 03:55
  • 1
    Отличный первый ответ на AskUbuntu! Поздравляем! – Fabby 26 November 2014 в 03:18
  • 2
    Я включил ваши изменения в принятый ответ. – Stephen Ostermiller 6 May 2015 в 22:16

Существует небольшая проблема с принятым ответом, поскольку он не может обрабатывать пользовательские команды с кавычками в них. Я только изменил обработку пользовательских команд для генерации правильного вывода.

  #! / Usr / bin / perl use strict;  my $ action = '';  my $ filename = '-';  для my $ arg (@ARGV) {if ($ arg eq "-e" или $ arg eq "--export") {$ action = 'export';  } elsif ($ arg eq "-i" или $ arg eq "--import") {$ action = 'import';  } elsif ($ arg eq "-h" или $ arg eq "--help") {print "Импорт и экспорт ключевых слов \n";  print "-e, --export & lt; имя_файла & gt; \n";  print "-i, --import & lt; имя_файла & gt; \n";  print "-h, --help \n";  Выход;  } elsif ($ arg = ~ / ^ \ - /) {die "Неизвестный аргумент $ arg";  } else {$ filename = $ arg;  if (! $ action) {if (-e $ filename) {$ action = 'import';  } else {$ action = 'export';  }}}} $ action = 'export' if (! $ action);  if ($ action eq 'export') {& amp; export ();  } else {& amp; 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 = "& gt; $ filename";  open (my $ fh, $ filename) ||  die "Не удается открыть файл $ filename: $!";  для моей $ folder (@ $ gsettingsFolders) {my @keylist = split (/ \n /, `gsettings list-recursively $ folder- & gt; [0]`);  foreach my $ line (@keylist) {if ($ line = ~ / ^ ([^] +) ([^] +) (?: \ @ [az] +)? (. *) /) {my ($  путь, $ name, $ value) = ($ 1, $ 2, $ 3);  if ($ name eq "custom-keybindings") {$ value = ~ s / [\ [\] \ '] // g;  my @c = split (/, /, $ value);  $ customBindings = \ @c;  } elsif ($ name = ~ / $ folder- & gt; [1] /) {if ($ value = ~ / ^ \ [| \ '/) {if ($ value = ~ / ^ \ [\' (?:  отключено)? \ '\] $ /) {$ value =' [] ';  } print $ fh "$ path \ t $ name \ t $ value \n";  }}} else {die "Могло отметить parse $ line";  }}} для моей $ folder (@ $ customBindings) {my $ gs = `gsettings list-recursively org.gnome.settings-daemon.plugins.media-keyss.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 = "& lt; $ filename";  open (my $ fh, $ filename) ||  die "Не удается открыть файл $ filename: $!";  my $ customcount = 0;  while (my $ line = & lt; $ fh & gt;) {chomp $ line;  if ($ line) {my @v = split (/ \ t /, $ line);  if (@v [0] eq 'custom') {my ($ custom, $ name, $ command, $ binding) = @v;  print "Установка пользовательского привязки клавиш: $ name \n";  print `gsettings set org.gnome.settings-daemon.plugins.media-keyss.custom-keybinding: / org / gnome / settings-daemon / plugins / media-keys / custom-keybindings / custom $ customcount / name \" $ name  \ "`;  print `gsettings set org.gnome.settings-daemon.plugins.media-keyss.custom-keybinding: / org / gnome / settings-daemon / plugins / media-keys / custom-keybindings / custom $ customcount / command \" $ command  \ "`;  print `gsettings set org.gnome.settings-daemon.plugins.media-keyss.custom-keybinding: / org / gnome / settings-daemon / plugins / media-keys / custom-keybindings / custom $ customcount / binding \" $ binding  \ "`;  $ Customcount ++;  } else {my ($ path, $ name, $ value) = @v;  print "Импорт $ path $ name \n";  print `gsettings set \" $ path \ "\" $ name \ "\" $ value \ "`;  }}} if ($ customcount & gt; 0) {my $ customlist = "";  for (my $ i = 0; $ i & lt; $ customcount; $ i ++) {$ customlist. = "," if ($ customlist);  $ customlist. = "'/ org / gnome / settings-daemon / plugins / media-keys / custom-keybindings / custom $ i /'";  } $ customlist = "[$ customlist]";  print "Импорт списка пользовательских привязок. \n";  print `gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings \" $ customlist \ "`;  } close ($ fh);  }  
2
ответ дан 4 August 2018 в 19:59

В 11.10 запуске Gnome classic я нашел набор каталогов (Custom0, Custom1 ...) в

  $ HOME / .gconf / desktop / gnome / keybindings  

Я скопировал эти каталоги в одну и ту же папку в чистой установке 12.04 (снова запущен с резервным копированием Gnome), вышел из системы и снова вошел в систему. Ключевые комбинации немного перепутались с переходом (что-то смешное произошло с модификатором SUPER), но в остальном они были там.

3
ответ дан 4 August 2018 в 19:59

Как выполнить резервное копирование настроек dconf, таких как быстрые клавиши

  1. Дамп их всех в файл: dconf dump / & gt; ~ / .config / dconf / user.conf
  2. Откройте этот файл в текстовом редакторе и выберите нужные вам параметры: editor ~ / .config / dconf / user.conf Если вы используете Vim, вам понадобится выделить этот синтаксис . .
  3. Если вы не знаете имя параметра, но знаете, как его изменить из графического интерфейса, такого как ] unit-control-center , запустите: dconf watch / , а затем измените их. Точная настройка появится на терминале.
  4. Если вы хотите восстановить эти настройки, запустите: dconf load / & lt; ~ / .config / dconf / user.conf [ ! d12]
  5. Git отслеживает конфигурационный файл, чтобы его никогда не потерять. https://github.com/andsens/homeshick - мой текущий любимый метод.

Проверено на Ubuntu 15.10. Совет адаптирован из: http://catern.com/2014/12/21/plain-text-configuration-gnome.html

14
ответ дан 4 August 2018 в 19:59

Ярлыки клавиш не сохраняются ни в одном месте

В зависимости от вашей версии дистрибутива приложение для быстрого доступа к клавиатуре может быть вызвано различными функциями в графическом интерфейсе, но в командной строке оно должно называться «gnome» -keybinding-свойств. Оказывается, что это аккуратное приложение прикладывает все ярлыки к одному удобному месту для редактирования пользователями.

Поскольку в приложении Ubuntu для операций с ключами нет одного щелчка по экспорту и импорту, я написал один в python:

Вот ссылка на скрипт

Экспорт вытаскивает настройки из системы. По существу, он содержит список всех мест привязки клавиш, жестко закодированных в словаре в скрипте. Сценарий отображает список и запускает команду «gconftool-2 --get [location]» для каждого ключа и сохраняет значение в словаре вместе с ключом. Затем, когда вы указываете местоположение для сохранения настроек, оно сохраняет словарь в файл в формате json.

Сценарий импорта отменяет этот процесс. Он загружает словарь из json-файла. Затем он перечисляет их и запускает команду «gconftool-2 - type string --set [location] [value]», чтобы восстановить все сохраненные настройки.

Один снимок с обоих концов и он сохраняет /! восстанавливает каждую комбинацию клавиш, не касаясь других параметров конфигурации системы.

Единственными зависимостями для этих скриптов являются:

  • python (проверено и работает в 2.6, 2.7 , и 3.1)
  • gconftool-2 (поставляется с установкой Ubuntu)
  • zenity (поставляется с установкой Ubuntu)

Python необходим для выполнения сценария, gconftool-2 используется для получения / установки параметров, zenity необходим для файлов загрузки / сохранения диалогов gui.

Я создал запись в Ubuntu Brainstorm [ ! d1], и я добился прогресса в том, чтобы включить эту функцию в меню графического интерфейса «gnome-keybinding-properties».

Обновление:

Я обновил комбинированные сценарии импорта и экспорта в один , добавлена ​​полная функциональность командной строки (в том числе --help) и сделал его совместимым как для python2x, так и для python3k. Кроме того, добавлена ​​ссылка на идею Ubuntu Brainstorm.

15
ответ дан 4 August 2018 в 19:59

Как выполнить резервное копирование настроек dconf, таких как быстрые клавиши

  1. Дамп их всех в файл: dconf dump / & gt; ~ / .config / dconf / user.conf
  2. Откройте этот файл в текстовом редакторе и выберите нужные вам параметры: editor ~ / .config / dconf / user.conf Если вы используете Vim, вам понадобится выделить этот синтаксис . .
  3. Если вы не знаете имя параметра, но знаете, как его изменить из графического интерфейса, такого как ] unit-control-center , запустите: dconf watch / , а затем измените их. Точная настройка появится на терминале.
  4. Если вы хотите восстановить эти настройки, запустите: dconf load / & lt; ~ / .config / dconf / user.conf [ ! d12]
  5. Git отслеживает конфигурационный файл, чтобы его никогда не потерять. https://github.com/andsens/homeshick - мой текущий любимый метод.

Проверено на Ubuntu 15.10. Совет адаптирован из: http://catern.com/2014/12/21/plain-text-configuration-gnome.html

14
ответ дан 6 August 2018 в 04:01

Другие вопросы по тегам:

Похожие вопросы: