এই প্রশ্নের অন্যান্য উত্তর লিখিত হওয়ার পরে উবুন্টু পরিবর্তন হয়েছে written
কী বাইন্ডিংগুলি gconf থেকে dconf এ চলে গেছে। GConf XML ফাইল তার তথ্য সঞ্চয় করে এবং দ্বারা অ্যাক্সেস করা হয়েছে gconf-editor
এবং gconf-tool2
। Dconf একটি বাইনারি বিন্যাসে তার ডেটা সঞ্চয় করে এবং দ্বারা ব্যবহার করা হয় dconf-editor
এবং gsettings
।
কী বাইন্ডিংগুলি সঞ্চিত রয়েছে সেগুলির সংখ্যা হ্রাস পেয়েছে। উইন্ডো ম্যানেজার কীবাইন্ডিংস ( org.gnome.desktop.wm.keybindings
) সংরক্ষণ করার জন্য এখন একটি কেন্দ্রীভূত ডকনফ পাথ রয়েছে । ডিরেক্টরিতে ম্যাপিং ফাইল রয়েছে /usr/share/gnome-control-center/keybindings/
যা দেখায় যে এটি কীভাবে আপনি উইন্ডো ম্যানেজারের (কম্পিউটার বা মেটেসিটি) ব্যবহার করছেন তার ভিত্তিতে কীভাবে প্রয়োগ করা হয়।
নন-উইন্ডো-ম্যানেজার সম্পর্কিত কী বাইন্ডিংগুলির দ্বিতীয় সেটটি ডকনফ পথে সংরক্ষণ করা হয় org.gnome.settings-daemon.plugins.media-keys
পাওয়ার বোতামগুলির সাথে সম্পর্কিত কী-বাইন্ডিংগুলির একটি তৃতীয় সেট রয়েছে যা ডকনফ পথে সঞ্চিত থাকে org.gnome.settings-daemon.plugins.power
। জিইউআইতে বর্তমানে একটি বাগ রয়েছে যা আপনাকে কী-বাইন্ডিংগুলি কনফিগার করতে দেয়। এটি এই সেটিংস সম্পর্কে জানে না। আমার কীবোর্ডে আমার একটি "ঘুম" বোতাম রয়েছে। যদি আমি এটিকে অন্য কার্যকারিতাটিতে পুনরায় নিয়োগ করতে চাই, আমাকে org.gnome.settings-daemon.plugins.power
নিজেই সেটিংটি অক্ষম করতে হবে । জিইউআই এটি আমার জন্য করে না (যদিও এটি নতুন কার্যকারিতা ঠিকঠাক বরাদ্দ করেছে)।
অন্য বলি কাস্টম কী বাইন্ডিং। এগুলি পুনঃস্থাপনযোগ্য স্কিমা ব্যবহার করে ডকনফে সংরক্ষণ করা হয়। এটি এইভাবে সম্পন্ন হয়েছে কারণ তাদের একটি স্বেচ্ছাসেবী সংখ্যা রয়েছে। একটি যুক্তিসঙ্গত পন্থা, তবে এটি কমান্ড লাইনের মাধ্যমে তাদের তালিকা তৈরি বা সংশোধন করা উচিত তার চেয়ে শক্ততর।
আমি আরও জানতে পেরেছি যে জিইউআই আপনাকে কী-বাইন্ডিংগুলি নির্ধারণ করতে দেয় তা এমনভাবে সীমাবদ্ধ যা আমাকে বিরক্ত করে। জিইউআই প্রতিটি ক্রিয়াকে হ'ল এক কী-বাইন্ডিং নির্ধারিত করার অনুমতি দেয়। 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);
}
এতে ব্যবহারকারীর দ্বারা নির্ধারিত 2589537 এর মধ্যে কোটগুলির সাথে কাস্টম কমান্ডগুলি মঞ্জুর করতে হবে।
gconftool-2 --dump /apps/metacity
বা এরকম কিছু।