টার্মিনাল থেকে কাস্টম কীবোর্ড শর্টকাটগুলি কীভাবে সেট করবেন?


56

বিভিন্ন লিনাক্স সংস্করণের জন্য টার্মিনাল থেকে কাস্টম কীবোর্ড শর্টকাটগুলি কীভাবে সেট করবেন?

মূলত আমি জানতে চাইছি কোথায় লিনাক্স কীবোর্ড শর্টকাট ফাইলগুলি সঞ্চয় করে এবং কীভাবে এটি সম্পাদনা করা যায়।

আমার গবেষণায় আমি একটি ফাইল পেয়েছি ~/.config/compiz-1/compizconfigতবে এটি খুলতে চেষ্টা করার সময় এটি আরও বা এনক্রিপ্টের মতো ছিল nano


দ্রষ্টব্য, এক্সএফসিই /
জুবুন্টু

উত্তর:


62

কমান্ড লাইন (14.04+) থেকে দুটি ধাপে শর্টকাট কী-বাইন্ডিং যুক্ত করা হচ্ছে

কমান্ড লাইন থেকে কাস্টম শর্টকাট যুক্ত করা যায় তবে এটি কিছুটা জটিল; এটি কী-বাইন্ডিংয়ের জন্য কয়েকটি ধাপে করা দরকার। অন্যদিকে, এটা হয় বেশ সহজবোধ্য এবং যদি আপনি একরকম কমান্ড লাইন (যে প্রশ্নটা ঠিক ছিল?) থেকে এটা কাজ করতে চান খুব ভাল স্ক্রিপ্টের করা যেতে পারে।

আপনার ইন্টারফেসের মতো (সিস্টেম সেটিংস> "কীবোর্ড"> "শর্টকাটস"> "কাস্টম শর্টকাটস"), কাস্টম কীবোর্ড শর্টকাটগুলি দুটি ধাপে কমান্ড লাইন থেকে তৈরি করা হয়েছে:

  1. কমান্ড দ্বারা ফিরে আসা তালিকা সম্পাদনা করে (যুক্ত করে) কী-বাইন্ডিং তৈরি করুন:

    gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings
    

    প্রত্যাবর্তিত তালিকাটি দেখে মনে হচ্ছে (এটি বর্তমানে কেবল একটি শর্টকাট থাকলে):

    ['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']
    

    কমান্ড দ্বারা সম্পাদিত তালিকা প্রয়োগ করুন:

    gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "[<altered_list>]"
    

    (দ্বিগুণ উদ্ধৃতি মনে)

    এনবি , তালিকার উল্লেখ (যেমন custom1, custom2) একটি অনন্য হওয়া উচিত তা বলার দরকার নেই । আপনি যদি এটি স্ক্রিপ্ট করেন তবে স্ক্রিপ্টটির নকলগুলি প্রতিরোধ করা উচিত। এক্ষেত্রে সম্পাদিত তালিকার মতো দেখতে হবে:

    ['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/']
    

    একটি কী-বাইন্ডিং যুক্ত করতে: custom1

  2. এর বৈশিষ্ট্যগুলি সেট করুন:

    • নাম:

      gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ name '<newname>'
      
    • কমান্ড প্রয়োগ করুন:

      gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ command '<newcommand>'
      
    • কী সংমিশ্রণ (উদাহরণস্বরূপ <Primary><Alt>g):

      gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ binding '<key_combination>'
      

দরকারী তথ্য এখানে পাওয়া যাবে

একটি নতুন কাস্টম শর্টকাট সেট করতে উদাহরণ স্ক্রিপ্ট

কমান্ড লাইন থেকে একটি নতুন শর্টকাট কী সংমিশ্রণ সেট করতে নীচের স্ক্রিপ্টটি ব্যবহার করা যেতে পারে। এটি কমান্ডের সাহায্যে ব্যবহার করা যেতে পারে (ধরে নিলে কী সংমিশ্রণটি উপলব্ধ রয়েছে):

python3 /path/to/script.py '<name>' '<command>' '<key_combination>'

একটি উদাহরণ:

খোলার জন্য একটি শর্টকাট কী সমন্বয় সেট করতে geditকী সমন্বয় সঙ্গে Alt+ + 7:

python3 /path/to/script.py 'open gedit' 'gedit' '<Alt>7'

এই পান্ডুলিপি:

#!/usr/bin/env python3
import subprocess
import sys

# defining keys & strings to be used
key = "org.gnome.settings-daemon.plugins.media-keys custom-keybindings"
subkey1 = key.replace(" ", ".")[:-1]+":"
item_s = "/"+key.replace(" ", "/").replace(".", "/")+"/"
firstname = "custom"
# get the current list of custom shortcuts
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
array_str = get("gsettings get "+key)
# in case the array was empty, remove the annotation hints
command_result = array_str.lstrip("@as")
current = eval(command_result)
# make sure the additional keybinding mention is no duplicate
n = 1
while True:
    new = item_s+firstname+str(n)+"/"
    if new in current:
        n = n+1
    else:
        break
# add the new keybinding to the list
current.append(new)
# create the shortcut, set the name, command and shortcut key
cmd0 = 'gsettings set '+key+' "'+str(current)+'"'
cmd1 = 'gsettings set '+subkey1+new+" name '"+sys.argv[1]+"'"
cmd2 = 'gsettings set '+subkey1+new+" command '"+sys.argv[2]+"'"
cmd3 = 'gsettings set '+subkey1+new+" binding '"+sys.argv[3]+"'"

for cmd in [cmd0, cmd1, cmd2, cmd3]:
    subprocess.call(["/bin/bash", "-c", cmd])

কিভাবে ব্যবহার করে:

স্ক্রিপ্টটি একটি ফাঁকা ফাইলে আটকে দিন, এটি সংরক্ষণ করুন, set_customshortcut.pyউপরে বর্ণিত হিসাবে এটি চালান।

বেশিরভাগ ব্যবহৃত ব্যবহৃত কী উল্লেখ করে (পরীক্ষামূলকভাবে পাওয়া যায়, বাধ্যতামূলক মান হিসাবে জিইউআই উপায় পরিবর্তনের বিষয়টি সন্ধান করে):

Super key:                 <Super>
Control key:               <Primary> or <Control>
Alt key:                   <Alt>
Shift key:                 <Shift>
numbers:                   1 (just the number)
Spacebar:                  space
Slash key:                 slash
Asterisk key:              asterisk (so it would need `<Shift>` as well)
Ampersand key:             ampersand (so it would need <Shift> as well)

a few numpad keys:
Numpad divide key (`/`):   KP_Divide
Numpad multiply (Asterisk):KP_Multiply
Numpad number key(s):      KP_1
Numpad `-`:                KP_Subtract

প্রভৃতি


5
দুর্দান্ত উত্তর। আমার এই স্ক্রিপ্টের জন্য 100 টি বোতামের আপভোট দরকার। ;)
আনন্দু এম দাস

@ জ্যাকবভিলিজম আপনি কী সংমিশ্রণ অংশটি সম্পর্কে কিছুটা ব্যাখ্যা করতে পারেন ? <<<< ট্যাগটি কি বোঝায়? এবং চিঠি জি এর পরিবর্তে আমি যে কোনও চিঠি আমার মনে হয়, প্রতিস্থাপন করতে পারি তাই?
বেনামি প্লাটিপাস

1
@ ভ্লাদক আইই, এক্সবুন্টু, হতে পারে যে এক্সুবিন্টুর শর্টকাটগুলি (এখনও) একটি এক্সএমএল ফাইলে সেট করা আছে। আমাকে দেখতে হবে। যদি তা হয় তবে xubuntu- নির্দিষ্ট হিসাবে ট্যাগ হওয়া আপনার প্রশ্নটি আবার খোলার দরকার।
জ্যাকব ভ্লিজম

1
আপনাকে ধন্যবাদ, জ্যাকবভিলিজম, আমি চেষ্টা করে দেখেছি। এবং আমি কেবল খুঁজে পেয়েছি যে আমার ফিক্সটি একটি ভুল ছিল। এখানে কিছু সত্যিই কৃপণ। custom-keybindingস্কিমার ভিতরে থাকা অবস্থায় শেষে "এস" থাকা উচিত নয়। তবে, কী বা পথ হিসাবে কাজ করার সময় এটিতে "s" থাকা উচিত। অন্যথায়, "সেট" কমান্ড ব্যতিক্রম নিক্ষেপ করবে। সুতরাং, দয়া করে custom-keybindingস্কিমা এর "গুলি" সরিয়ে দিন । এছাড়াও, আপনার অজগর স্ক্রিপ্টটিও আপডেট হওয়া উচিত।
ই মেঘ

2
এফওয়াইআই, আপনার পাইথন স্ক্রিপ্টটিতে একটি বাগ রয়েছে has যদি কোনও কীবোর্ড শর্টকাট ইনস্টল করা না থাকে তবে gsettingsরিটার্নগুলি @as []যা মূল্যায়ন করে না।
Seanny123

11

এটি করার সহজ সরল উপায় রয়েছে dconf:

dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/command "'move-window.sh'"
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/binding "'<Primary><Alt>Page_Down'"
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/name "'move-window'"

ব্যবহার gsettings:

gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ name "'move-window'"
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ binding "'<Primary><Alt>Page_Down'"
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ command "'/usr/local/bin/move-window.sh'"

custom0আরও বেশি বাইন্ডিং যুক্ত করার জন্য আপনাকে অংশে সংখ্যা বাড়িয়ে নেওয়া দরকার । custom1, custom2ইত্যাদি

এটিকে স্থায়ী করতে, কেবল এটিতে যুক্ত করুন .bash_profileবা একটি অনুরূপ স্ক্রিপ্ট যা লগইন শেল দ্বারা চালিত হয়। শুধু অ লগইন শাঁস জন্য এটি করবেন না .bashrcএই কারণ আমার অভিজ্ঞতা থেকে dconfএবং gsettingsএটা মন্দীভূত উল্লেখযোগ্যভাবে। 30 টি বাইন্ডিং পরিবর্তন / যুক্ত করতে এক সেকেন্ড সময় লাগে! আপনি এটি নন-লগইন শেলটিতে চান না ( .bashrc)!


1
উভয় উবুন্টু 18.04 এ ব্যর্থ হয়। @ জ্যাকব ভিলিজমের উত্তর এবং এই সম্প্রদায় উইকির অনুসরণ করে , আপনাকে custom0কাস্টম শর্টকাট তালিকায় যুক্ত করতে হবে, যেমন সহ gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['.../custom1/']"। আমি সম্পর্কে জানি না dconf
মাইগুয়েলমোরিন

এছাড়াও dconf dump DIRথেকে stdout- এ একটি সম্পূর্ণ subpath ডাম্প। আউটপুটটি জিভেরিয়েন্ট সিনট্যাক্সের মান সহ একটি কীফাইল-জাতীয় বিন্যাসে রয়েছে।
পাবলো এ

10

সমস্ত কাস্টম কীবোর্ড শর্টকাট সেটিংস dconf ডাটাবেসে সংরক্ষিত আছে।

আপনি এগুলি সহজেই এর সাথে অ্যাক্সেস করতে পারবেন dconf-editor:

sudo apt-get install dconf-editor

তারপরে সম্পাদকীয়ের নিম্নলিখিত dconf পথে যান:

/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/

এখানে চিত্র বর্ণনা লিখুন


লিনাক্সের সমস্ত সংস্করণের জন্য কি অবস্থানটি একই? বা উবুন্টুর কমপক্ষে সমস্ত সংস্করণ?
বেনামে প্লাটিপাস

1
@ অজ্ঞাতনামা প্লাটিপাস: এটি 14.04 সাল থেকে সেটিংসের অবস্থান (আমি অন্য ডিসট্রোর জন্য বলতে পারি না)
সিলভাইন পাইনাউ

2
এটি গ্রাফিকাল পদ্ধতি, এবং টার্মিনাল থেকে নয়
আনন্দু এম দাস

1
আমার মিডিয়া-কীগুলিতে কাস্টম-কি-বাইন্ডিংস সাবকি না থাকলে আমি কী করব?
ব্র্যান্ডন কুকজেনস্কি

প্রশ্নটি
জিএমআই

6

কমান্ড লাইন থেকে 12.04-এ শর্টকাট কী-বাইন্ডিং যুক্ত করা হচ্ছে

গৃহীত উত্তরটি আরও ব্যাপক আকারে রোধ করতে 12.04 এর জন্য পৃথক সমাধান পোস্ট করুন।

(এবং সহ) 12.04 অবধি, কাস্টম কী-বাইন্ডিংগুলি dconfডাটাবেসে সংরক্ষণ করা হয় না , তবে ~/.gconf/desktop/gnome/keybindings(একটি এক্সএমএল ফাইলে, custom0ইত্যাদি যেমন সাবফোল্ডারে )।

নীচের স্ক্রিপ্টটি xmlফাইল এবং এর বিপরীত ফোল্ডারটি তৈরি করে , স্বয়ংক্রিয়ভাবে সঠিকভাবে নামকরণ করা।

কিভাবে ব্যবহার করে

  1. একটি ফাঁকা ফাইলে স্ক্রিপ্টটি আটকান, এটি সংরক্ষণ করুন set_customshortcuts_12.py
  2. কমান্ড দিয়ে এটি চালান:

    python /path/to/set_customshortcuts_12.py <name> <command> <key1> <key2> <key3>
    

    key3 optionচ্ছিক, আদেশগুলি উদাহরণস্বরূপ হতে পারে:

    python /path/to/set_customshortcuts_12.py run_browser firefox Primary 7 
    

    অথবা

    python /path/to/set_customshortcuts_12.py run_texteditor gedit Primary Alt 3 
    

নোট

  • মনে রাখবেন কীগুলির নামকরণ সম্পাদনা গেটেটিং থেকে আলাদা। কীগুলির নাম দেওয়া হয়েছে যেমন তারা সিস্টেম সেটিংস> "কীবোর্ড"> "শর্টকাটস"> "কাস্টম শর্টকাট", যতদূর আমি দেখতে পাচ্ছি in
  • আমি স্ক্রিপ্টটি ভার্চুয়ালবক্সের অধীনে 12.04 এ পরীক্ষা করেছি; পরিবর্তনগুলি হওয়ার জন্য এটির জন্য লগ আউট / ইন প্রয়োজন।
#!/usr/bin/env python
import os
import sys

home = os.environ["HOME"]
name = sys.argv[1]
command = sys.argv[2]
keys = sys.argv[3:]

keyfile = [
    '<?xml version="1.0"?>',
    '<gconf>',
    '\t<entry name="action" mtime="1427791732" type="string">',
    '\t\t<stringvalue>'+command+'</stringvalue>',
    '\t</entry>',
    '\t<entry name="name" mtime="1427791732" type="string">',
    '\t\t<stringvalue>'+name+'</stringvalue>',
    '\t</entry>',
    '\t<entry name="binding" mtime="1427791736" type="string">',
    '\t</entry>',
    '</gconf>',
    ]

if len(keys) == 2:
    keyfile.insert(9, '\t\t<stringvalue>&lt;'+keys[0]+'&gt;'+keys[1]+'</stringvalue>')
else:
    keyfile.insert(9, '\t\t<stringvalue>&lt;'+keys[0]+'&gt;&lt;'+keys[1]+'&gt;'+keys[2]+'</stringvalue>')

n = 0
while True:
    check = home+"/"+".gconf/desktop/gnome/keybindings/custom"+str(n)
    if os.path.exists(check):
        n = n+1
    else:
        newdir = check
        newfile = check+"/"+"%gconf.xml"
        break

os.makedirs(newdir)
with open(newfile, "wt") as shortcut:
    for l in keyfile:
        shortcut.write(l+"\n")

1

আপনি সিড ব্যবহার করে পাইথন স্ক্রিপ্ট ছাড়াই একটি নতুন কাস্টম শর্টকাট সেট করতে পারেন। আপনাকে কেবল নিম্নলিখিত স্ক্রিপ্টে আপনার পছন্দ অনুযায়ী নাম , বাঁধাই এবং ক্রিয়া সেট করতে হবে:

name="myaction"
binding="<CTRL><ALT>v"
action="/usr/local/bin/myaction"

media_keys=org.gnome.settings-daemon.plugins.media-keys
custom_kbd=org.gnome.settings-daemon.plugins.media-keys.custom-keybinding
kbd_path=/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/$name/
new_bindings=`gsettings get $media_keys custom-keybindings | sed -e"s>'\]>','$kbd_path']>"| sed -e"s>@as \[\]>['$kbd_path']>"`
gsettings set $media_keys custom-keybindings "$new_bindings"
gsettings set $custom_kbd:$kbd_path name $name
gsettings set $custom_kbd:$kbd_path binding $binding
gsettings set $custom_kbd:$kbd_path command $action

1

তার জন্য একটি স্ক্রিপ্ট লিখেছিলেন। নিচে দেখ.

creatShortcutঅনুরোধে ব্যবহারটি দেখুন ।

export nextShortcutId=0
function creatShortcut() {
    name="$1"
    commandToRun="$2"
    binding="$3"
    path="/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${nextShortcutId}"
    nextShortcutId=$nextShortcutId+1
    dconf write "$path/name" "'""$name""'"
    dconf write "$path/command" "'""$commandToRun""'"
    dconf write "$path/binding" "'""$binding""'"
}

# dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/binding '"<Primary><Shift>exclam"'
creatShortcut 'copyq show' 'copyq show' '<Primary><Shift>exclam'
creatShortcut 'System Monitor' 'gnome-system-monitor' '<Primary><Alt>m'
creatShortcut 'Suspend' 'systemctl suspend -i' '<Super>d'
creatShortcut 'Volume Up' 'amixer -D pulse sset Master 5%+' '<Super>Page_Up'
creatShortcut 'Volume Down' 'amixer -D pulse sset Master 5%-' '<Super>Page_Down'

overallbindings=""
for ((i = 0 ; i < $nextShortcutId ; i++ ));
do
    overallbindings="$overallbindings, '$customindingPathPrefix$i/'"
done
overallbindings="[${overallbindings:2}]" # Delete the first 2 chars: " ," - space and comma
# echo $overallbindings

# Update the list of bindings for the shortcuts to work
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings "$overallbindings"
# dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom5/']"

এটি নিখুঁত হবে যদি নেক্সট শর্টকুটআইডি স্বয়ংক্রিয়ভাবে সনাক্ত করতে পারে তবে পুরানো কীগুলি ইতিমধ্যে রয়েছে (ইতিমধ্যে অন্যান্য প্রোগ্রাম দ্বারা তৈরি করা হয়েছে) কেবল কোনও দ্বন্দ্ব নেই তা নিশ্চিত করতে। এছাড়াও, প্রবেশ কীগুলির সাথে অন্য কোনও কিছু আবদ্ধ কিনা তা পরীক্ষা করে দেখুন।
জ্যাক গিফিন

0

আমি দেখেছি উত্তর @JacobVlijm খুব দরকারী, বিশেষ করে স্ক্রিপ্ট দ্বারা পোস্ট করা হয়েছে। আমি কোডটি পোর্ট করেছি bash। আমি এই ফাংশনটি নিখুঁত নই, এটিতে কিছু বাগ থাকতে পারে তবে এটি আমার পক্ষে কাজ করে।

function set_shortcuts(){
    # Usage: set_shortcuts [name] [command] [shortcut]
    unset num i name command shortcut value test value_new
    local name="$1"
    local command="$2"
    local shortcut="$3"
    local value=$(gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings)
    local test=$(echo $value | sed "s/\['//;s/', '/,/g;s/'\]//" - | tr ',' '\n' | grep -oP ".*/custom\K[0-9]*(?=/$)")

    if [ "$(echo "$value" | grep -o "@as")" = "@as" ]; then
        local num=0
        local value_new="['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${num}/']"
    else
        local i=1
        until [ "$num" != "" ]; do
            if [ "$(echo $test | grep -o $i)" != "$i" ]; then
                local num=$i
            fi
            i=$(echo 1+$i | bc);
        done
        local value_new=$(gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings | sed "s#']\$#', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${num}/']#" -)
    fi

    gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "$value_new"
    gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${num}/ name "$name"
    gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${num}/ command "$command"
    gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${num}/ binding "$shortcut"
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.