इस प्रश्न के अन्य उत्तर लिखे जाने के बाद से उबंटू बदल गया है।
कीबाइंडिंग gconf से dconf में स्थानांतरित हो गए हैं। Gconf एक्सएमएल फ़ाइलें में अपने डेटा संग्रहीत करता है और ने पहुँच gconf-editor
और gconf-tool2
। डॉन्क अपना डेटा बाइनरी फॉर्मेट में स्टोर करता है और इसके द्वारा एक्सेस किया जाता है dconf-editor
और gsettings
।
कीबिन्डिंग संग्रहित स्थानों की संख्या कम हो जाती है। विंडो मैनेजर कीबाइंडिंग ( org.gnome.desktop.wm.keybindings
) स्टोर करने के लिए अब एक सेंट्रलाइज्ड dconf पाथ है । निर्देशिका में मैपिंग फ़ाइलें हैं /usr/share/gnome-control-center/keybindings/
जो दिखाती हैं कि ये उन विंडो प्रबंधक के आधार पर कैसे लागू की जाती हैं जिन्हें आप वास्तव में उपयोग कर रहे हैं (कॉम्पिज़ या मेटासिटी)।
गैर-विंडो-प्रबंधक से संबंधित कुंजी बाइंडिंग का दूसरा सेट dconf पथ में संग्रहीत किया जाता है org.gnome.settings-daemon.plugins.media-keys
पावर बटन से संबंधित कीबाइंडिंग का एक तीसरा सेट है जो डॉन्कफ पथ में संग्रहीत है org.gnome.settings-daemon.plugins.power
। जीयूआई में वर्तमान में एक बग है जो आपको कीबाइंडिंग को कॉन्फ़िगर करने देता है। यह इन सेटिंग्स के बारे में नहीं जानता। मेरे कीबोर्ड पर "स्लीप" बटन है। यदि मैं इसे अन्य कार्यक्षमता पर पुन: असाइन करना चाहता हूं, तो मुझे org.gnome.settings-daemon.plugins.power
मैन्युअल रूप से सेटिंग को अक्षम करना होगा। GUI मेरे लिए ऐसा नहीं करता है (हालाँकि यह नई कार्यक्षमता को ठीक करता है)।
अन्य शिकन कस्टम कुंजी बाइंडिंग है। इन्हें रीकॉन्सेक्टेबल स्कीमा का उपयोग करके dconf में संग्रहित किया जाता है। इस तरह से किया गया क्योंकि उनमें से एक मनमाना संख्या है। एक उचित दृष्टिकोण, लेकिन यह कमांड लाइन के माध्यम से उन्हें सूचीबद्ध करना या संशोधित करना कठिन बनाता है जितना कि यह होना चाहिए।
मुझे यह भी पता चला कि जीयूआई जो आपको कीबाइंडिंग असाइन करने की अनुमति देता है, वह एक तरह से सीमित है जो मुझे परेशान करता है। जीयूआई वास्तव में एक कीबाइंडिंग को प्रत्येक कार्रवाई को सौंपा जा सकता है। Dconf में, आप एकल क्रिया के लिए बाइंडिंग की एक सरणी सेट कर सकते हैं। यह मेरे लिए उपयोगी है। उदाहरण के लिए, मुझे "क्लोज-विंडो" एक्शन को ट्रेडिटोनल ऑल्ट-एफ 4 के साथ-साथ अपने कीबर्ड पर सिंगल बटन हिट करने के लिए आसान करना है।
मैंने सभी कीबाइंडिंग को एक सीएसवी फाइल में डंप करने के लिए एक पर्ल स्क्रिप्ट लिखी है, या उन्हें सीएसवी फाइल से रिस्टोर किया है। उदाहरण के लिए आपके द्वारा उपयोग की जाने वाली कीबाइंडिंग को डंप करने के लिए:
./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 द्वारा फिक्स को शामिल किया गया है, जिसमें उन्हें उद्धरणों के साथ कस्टम कमांड की अनुमति दी जा सकती है।
gconftool-2 --dump /apps/metacity
या ऐसा कुछ।