나는 다른 파티션의 마지막 버전을 백업으로 유지하면서 OS를 최신 상태로 유지하기 위해 모든 릴리스마다 새 버전을로드합니다. 또한 많은 사용자 정의 키 매핑을 사용합니다.
지금까지 시스템 전체에서 대부분의 구성을 전송하는 방법을 알아 냈지만 사용자 정의 키보드 단축키 매핑이 저장된 위치는 알 수 없습니다.
그놈이 어디에 넣었는지 아는 사람 있나요? 별도의 사용자 구성 (예 : ~ /) 및 시스템 구성 (예 : / etc) 파일이 있습니까?
나는 다른 파티션의 마지막 버전을 백업으로 유지하면서 OS를 최신 상태로 유지하기 위해 모든 릴리스마다 새 버전을로드합니다. 또한 많은 사용자 정의 키 매핑을 사용합니다.
지금까지 시스템 전체에서 대부분의 구성을 전송하는 방법을 알아 냈지만 사용자 정의 키보드 단축키 매핑이 저장된 위치는 알 수 없습니다.
그놈이 어디에 넣었는지 아는 사람 있나요? 별도의 사용자 구성 (예 : ~ /) 및 시스템 구성 (예 : / etc) 파일이 있습니까?
답변:
이 질문에 대한 다른 답변이 작성된 후 우분투가 변경되었습니다.
키 바인딩이 gconf에서 dconf로 이동했습니다. GConf를 XML 파일에 데이터를 저장하고 액세스 한 gconf-editor
과 gconf-tool2
. Dconf 이진 포맷으로 데이터를 저장 및 액세스된다 dconf-editor
하고 gsettings
.
키 바인딩이 저장되는 장소 수가 줄어 듭니다. 이제 창 관리자 키 바인딩 ( org.gnome.desktop.wm.keybindings
) 을 저장하기위한 중앙 집중식 dconf 경로가 있습니다 . 디렉토리 /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에 할당하고 키보드의 단일 버튼을 누르기 쉽도록 할당하고 싶습니다.
모든 키 바인딩을 csv 파일로 덤프하거나 csv 파일에서 복원하기 위해 Perl 스크립트를 작성했습니다. 예를 들어 키 바인딩을 덤프하려면 다음을 사용하십시오.
./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 의 수정 사항이 포함 됩니다.
[org/mate/marco/global-keybindings]
, [org/mate/marco/window-keybindings]
...)
키보드 단축키와 같은 dconf 설정을 백업하는 방법
파일로 모두 덤프하십시오.
dconf dump / >~/.config/dconf/user.conf
텍스트 편집기에서 해당 파일을 열고 원하는 설정을 선택하십시오.
editor ~/.config/dconf/user.conf
Vim을 사용하는 경우이 구문을 강조 표시해야 합니다.
당신은 곧 자신 에게 무엇인지<Primary>
물어볼 것 입니다 .
설정 이름을 모르지만 다음과 같은 GUI에서 설정을 수정하는 방법을 알고 있다면 다음을 unity-control-center
실행하십시오.
dconf watch /
그런 다음 수정하십시오. 그러면 정확한 설정이 터미널에 나타납니다.
해당 설정을 복원하려면 다음을 실행하십시오.
dconf load / <~/.config/dconf/user.conf
힘내 설정 파일을 잃어 버리지 않도록 추적하십시오. https://github.com/andsens/homeshick 은 내가 가장 좋아하는 방법입니다.
우분투 15.10에서 테스트되었습니다. 팁 : http://catern.com/2014/12/21/plain-text-configuration-gnome.html
그놈 터미널은 예측할 수없는 프로파일 ID 때문에 불행히도 이러한 편집에 저항력이 있습니다 : 18.04의 명령 행에서 그놈 터미널 프로파일 편집
키보드 단축키는 한곳에 저장되지 않습니다
배포판 버전에 따라 키보드 단축키 응용 프로그램은 GUI에서 다른 것으로 불릴 수 있지만 명령 줄에서는 'gnome-keybinding-properties'라고합니다. 이 깔끔한 작은 응용 프로그램은 모든 바로 가기를 사용자가 편집 할 수있는 편리한 장소로 가져옵니다.
우분투에는 키 바인딩에 대한 원 클릭 내보내기 / 가져 오기 도구가 없으므로 파이썬으로 작성했습니다.
내보내기는 시스템에서 설정을 가져옵니다. 기본적으로 모든 키 바인딩 위치 목록이 스크립트의 사전에 하드 코딩되어 있습니다. 스크립트는 목록을 에뮬레이트하고 모든 키에 대해 "gconftool-2 --get [location]"명령을 실행하고 키와 함께 사전에 값을 저장합니다. 그런 다음 설정을 저장할 위치를 지정하면 사전이 파일에 json 형식으로 저장됩니다.
가져 오기 스크립트는이 프로세스를 반대로합니다. json 파일에서 사전을로드합니다. 그런 다음 이들을 열거하고 "gconftool-2 --type string --set [location] [value]"명령을 실행하여 저장된 모든 설정을 복원합니다.
한쪽 끝을 한 번에 촬영하면 다른 시스템 구성 설정을 건드리지 않고 모든 단일 키보드 단축키를 저장 / 복원합니다.
이 스크립트에 대한 유일한 종속성은 다음과 같습니다.
Python은 스크립트를 실행하는 데 필요하고 gconftool-2는 설정을 가져 오거나 설정하는 데 사용되며 파일로드 / 저장 GUI 대화 상자에는 정력이 필요합니다.
Ubuntu Brainstorm에서 항목을 만들었으며이 기능을 'gnome-keybinding-properties'GUI 메뉴에 도입하는 작업을 진행하고 있습니다.
최신 정보:
가져 오기 및 내보내기 스크립트를 하나로 통합하고 전체 명령 행 기능 (--help info 포함)을 추가하고 python2x 및 python3k에 모두 호환되도록했습니다. 또한 우분투 브레인 스토밍 아이디어에 대한 링크를 추가했습니다.
gnome-keybinding-properties
스크립트와 함께 패치를 게시하는 것이 좋습니다 .
Keyboard Shortcuts
예. gnome-keybinding-properties
... 또는 예를 들어 추가 된 다른 키 바인딩 Xbindkeys
... 그래서 나는 gconf '가 sysetem 전체 단축키가 "저장된"위치가 아니라 무언가 / 더 깊은 곳의 인터페이스라고 생각합니다 ... (I 그 곳을 찾고 있었어요 .. :). 아마도 지금은 3 개의 '내 보낸'목록을 유지해야 할 것입니다.
수락 된 답변에는 따옴표가있는 사용자 정의 명령을 처리 할 수 없다는 약간의 문제가 있습니다. 올바른 출력을 생성하기 위해 사용자 정의 명령 처리 만 변경했습니다.
#!/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);
}
gconftool-2 --dump /apps/metacity
하거나 그런 것을 추측하고 있습니다 .