Eva*_*ice 62 keyboard-layout backup
我通常为每个版本加载一个新版本,以保持我的操作系统最新,同时保留另一个分区上的最新版本作为备份。我还使用了很多自定义键映射。
到目前为止,我已经弄清楚如何跨系统传输我的大部分配置,但我无法弄清楚自定义键盘快捷键映射的存储位置。
有谁知道侏儒把这些放在哪里?是否有单独的用户配置(即 ~/)和系统配置(即 /etc)文件?
Ste*_*ler 53
自从写了这个问题的其他答案以来,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。GUI 中当前存在一个错误,可让您配置键绑定。它不知道这些设置。我的键盘上有一个“睡眠”按钮。如果我想将其重新分配给其他功能,则必须org.gnome.settings-daemon.plugins.power手动禁用该设置。GUI 不适合我(尽管它可以很好地分配新功能)。
另一个问题是自定义键绑定。这些使用可重定位模式存储在 dconf 中。这样做是因为它们的数量是任意的。一种合理的方法,但它使通过命令行列出或修改它们比应有的更难。
我还发现允许您分配键绑定的 GUI 以一种让我烦恼的方式受到限制。GUI 允许为每个操作分配一个键绑定。在 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);
}
Run Code Online (Sandbox Code Playgroud)
这包括user2589537的修复,以允许其中包含引号的自定义命令。
Cir*_*郝海东 26
如何备份键盘快捷键等 dconf 设置
将它们全部转储到一个文件中:
dconf dump / > ~/.config/dconf/user.conf
Run Code Online (Sandbox Code Playgroud)在文本编辑器上打开该文件并选择您关心的设置:
editor ~/.config/dconf/user.conf
Run Code Online (Sandbox Code Playgroud)
如果你使用 Vim,你会想要这个语法 highlight。
你很快就会问自己什么是<Primary>。
如果您不知道设置的名称,但知道如何从 GUI 中修改它unity-control-center,请运行:
dconf watch /
Run Code Online (Sandbox Code Playgroud)
然后修改它们。确切的设置将出现在终端上。
如果要恢复这些设置,请运行:
dconf load / < ~/.config/dconf/user.conf
Run Code Online (Sandbox Code Playgroud)Git 跟踪配置文件永远不会丢失它。Homeshick是我目前最喜欢的方法。
在 Ubuntu 15.10 上测试。提示改编自这里。
不幸的是,由于配置文件 ID 不可预测, Gnome 终端无法抵抗此类编辑。
相关:如何恢复默认键盘快捷键?
Eva*_*ice 15
键盘快捷键不存储在任何一个地方
根据您的发行版版本,键盘快捷键应用程序在 GUI 中可能被称为不同的东西,但在命令行上它应该被称为“gnome-keybinding-properties”。事实证明,这个简洁的小应用程序将所有快捷方式都集中在一个方便用户编辑的地方。
由于 Ubuntu 中不存在用于键绑定的一键导出/导入工具,因此我在 python 中编写了一个:
导出从系统中提取设置。本质上,它包含所有键绑定位置的列表,这些位置被硬编码到脚本中的字典中。该脚本枚举列表并为每个键运行命令“gconftool-2 --get [location]”,并将值与键一起存储在字典中。然后,当您指定保存设置的位置时,它会将字典以 json 格式保存到文件中。
导入脚本逆转了这个过程。它从 json 文件加载字典。然后它枚举这些并运行命令“gconftool-2 --type string --set [location] [value]”来恢复所有保存的设置。
在任一端进行一次射击,它可以保存/恢复每个键盘快捷键,而无需触及任何其他系统配置设置。
这些脚本的唯一依赖项是:
执行脚本需要 Python,gconftool-2 用于获取/设置设置,文件加载/保存 gui 对话框需要 zenity。
我在 Ubuntu Brainstorm 上创建了一个条目,并且正在将此功能引入到“gnome-keybinding-properties”GUI 菜单中。
更新:
我更新了将导入和导出脚本合二为一,添加了完整的命令行功能(包括 --help 信息)并使其兼容 python2x 和 python3k。此外,添加了指向 Ubuntu 头脑风暴想法的链接。
您可以使用dconf以下命令保存/备份/导出自定义快捷键/键绑定sed
dconf dump / | sed -n '/\[org.gnome.settings-daemon.plugins.media-keys/,/^$/p' > custom-shortcuts.conf # Export
Run Code Online (Sandbox Code Playgroud)
与通常答案的不同之处在于,这将保留文件中 dconf 设置的路径,从而更容易导入,只需dconf load / < file.
dconf load / < custom-shortcuts.conf # Import
Run Code Online (Sandbox Code Playgroud)
仅适用于添加的自定义快捷方式
请注意,dconf仅转储非默认值
要备份,您可能需要使用custom-shortcuts-$(date -I).conf
通过在导入前重置为默认值来测试它是否有效
gsettings reset-recursively org.gnome.settings-daemon.plugins.media-keys
Run Code Online (Sandbox Code Playgroud)