কম্পিউটার টিউটোরিয়াল

লিনাক্সে bspwm ইনস্টল ও কনফিগার করার পদ্ধতি

বাইনারি স্পেস পার্টিশনিং উইন্ডো ম্যানেজার (bspwm) লিনাক্সের জন্য একটি পাওয়ারফুল মিনিমালিস্ট উইন্ডো ম্যানেজার। এটি অত্যন্ত কনফিগারেবল এবং উইন্ডো ম্যানেজমেন্টের একটি ইনোভেটিভ পদ্ধতি প্রস্তাব করে। Bspwm C-তে লেখা এবং যেকোনো ভাষায় কনফিগার করা যায়। Bspwm উইন্ডো ম্যানেজারে ইউজার কাস্টমাইজেশনের চূড়ান্ত উদাহরণ। এটি পাওয়ার ইউজার এবং টিংকারারদের আকর্ষণ করে যারা নিজের অনন্য ওয়ার্কফ্লো তৈরি শিখতে আগ্রহী।

বাইনারি স্পেস পার্টিশনিং, ব্যাখ্যা

বাইনারি স্পেস পার্টিশনিং হলো ধারণা যে ডেস্কটপের উইন্ডোগুলোকে একটি ফুল বাইনারি ট্রির লিফ হিসেবে রিপ্রেজেন্ট করা যায়। একটি ফুল বাইনারি ট্রি হলো তথ্য অর্ডার করার একটি স্ট্রাকচার হায়ারার্কিক্যাল নোড ব্যবহার করে। সেই ট্রির মধ্যে যেকোনো তথ্য টুয়োজে সর্ট করা থাকে একটি রুট নোড সবসময় দুটি নোড ধারণ করে।

Bspwm নোড দিয়ে কাজ করে। প্র্যাকটিক্যালি, আপনি একটি খালি ডেস্কটপে একটি উইন্ডো তৈরি করলে, bspwm সেটি রাখার জন্য একটি সিঙ্গেল নোড তৈরি করে। আপনি সেই নোডকে একটি লিফ নোড হিসেবে চিন্তা করতে পারেন। কিন্তু আপনি সেই ডেস্কটপে একটি অতিরিক্ত উইন্ডো তৈরি করলে, সেই লিফ নোডটি একটি রুট নোড হয়ে যাবে এবং bspwm সেটির সাথে আটাচ্ড দুটি নতুন লিফ নোড তৈরি করবে। এরপর এটি বর্তমান উইন্ডো এবং নতুন তৈরি উইন্ডোকে সেসব লিফ নোডে রাখবে।

এই পরে তৈরি হওয়া যেকোনো নতুন উইন্ডো এখন সেসব লিফ নোডের যেকোনো একটির সাথে অ্যাসোসিয়েটেড হবে, সেগুলোকে তাদের নিজস্ব রুট নোডে পরিণত করবে।

এভাবে উইন্ডো সাজানো ডেস্কটপের ভিতরে একটি স্পষ্ট হায়ারার্কি তৈরি করে। স্পষ্ট হয় কোন লিফ নোডগুলো প্রথমে Спаন করা হয়েছিল এবং কোনগুলো একটি নির্দিষ্ট গ্রুপের রুট নোড থেকে এসেছে। এটি কাস্টম বিহेवিয়ার রুল তৈরি করার সময় উপকারী হয় স্পেসিফিক উইন্ডো এবং উইন্ডো লেআউটের জন্য।

কিবایندিং এবং স্ট্যাটাস বার

এটি লক্ষ্য করা গুরুত্বপূর্ণ যে bspwm শুধু উইন্ডো ম্যানেজ করে। অর্থাৎ, উইন্ডো ম্যানেজমেন্টের সাথে সম্পর্কিত নয় এমন যেকোনো ফাংশন bspwm প্যাকেজে অন্তর্ভুক্ত নেই। এতে রয়েছে কীকে ফাংশন সাথে বাইন্ড করার ক্ষমতা এবং স্ট্যাটাস বার ডিসপ্লে করার ক্ষমতা।

bspwm-এ কিবایندিং ব্যবহার করতে, ডেভেলপাররা একটি আলাদা প্রোগ্রাম তৈরি کردند যার নাম Simple X Hotkey Daemon (sxhkd) যা শুধু কিবایندিং ম্যানেজ করে। স্ট্যাটাস বার জন্য, তবে, ইউজার সেকেন্ডারি থার্ড-পার্টি অ্যাপ্লিকেশন ইনস্টল করতে পারেন যেমন polybar এবং lemonbar।

bspwm এবং sxhkd ইনস্টল করা

bspwm এবং sxhkd ইনস্টল করা তুলনামূলকভাবে স্ট্রেটফরওয়ার্ড। দুটি প্রোগ্রামও প্রায় সব লিনাক্স রিপোজিটরিতে উপলব্ধ। উদাহরণস্বরূপ, Debian এবং Ubuntu-তে সেগুলো ইনস্টল করতে apt ব্যবহার করতে পারেন:

sudo apt install bspwm sxhkd

Arch Linux-এ pacman ব্যবহার করতে পারেন:

sudo pacman -Syu bspwm sxhkd

Fedora-এ dnf ব্যবহার করতে পারেন:

sudo dnf install bspwm sxhkd

Void Linux-এ xbps ব্যবহার করতে পারেন:

sudo xbps-install bspwm sxhkd

আমার কেসে, আমি আমার Void Linux সিস্টেমে ইনস্টল করব, তাই আমি XBPS ব্যবহার করব।

bspc: bspwm-এর ইউনিভার্সেল কন্ট্রোলার

bspwm ব্যবহার করতে আমাদের শুধু একটি প্রোগ্রামের সাথে ইন্টারঅ্যাক্ট করতে হবে: bspc। এটি একটি পাওয়ারফুল ইউটিলিটি যা bspwm-এর আচরণ কন্ট্রোল ও কনফিগার করতে পারে। আসলে, সকল কমান্ড যা আমরা উইন্ডো ম্যানিপুলেট এবং এর আচরণ কনফিগার করতে ব্যবহার করব সেগুলো শুধু bspc কমান্ড।

bspwm-এর জন্য কনফিগারেশন ফাইল তৈরি করা

bspwm কনফিগার শুরু করতে, আমাদের প্রথমে একটি কনফিগারেশন ফাইল তৈরি করতে হবে। এটি হলো যেখানেই bspwm bspc কমান্ডগুলো খুঁজবে যা সেটি এক্সিকিউট করবে যখন প্রথমে রান করবে। ডিফল্টভাবে, bspwm "/home/$USER/.config/bspwm/bspwmrc" ফাইলটি খুঁজে। সেটি তৈরি করতে টাইপ করুন:

mkdir -p /home/$USER/.config/bspwm && touch /home/$USER/.config/bspwm/bspwmrc

এই কমান্ডটি bspwm ফোল্ডার তৈরি করবে "/home/$USER/.config/"-এ এবং সেটির ভিতরে bspwmrc ফাইলও তৈরি করবে।

এখন, bspwmrc ফাইল যেকোনো ভাষায় লেখা যাবে যতক্ষণ না সেটি এক্সিকিউটেবল। অর্থাৎ আমাদের প্রথমে এর ফাইল প্রপার্টি সেট করতে হবে। সেটি করতে নিচের কমান্ড টাইপ করুন:

sudo chmod 774 /home/$USER/.config/bspwm/bspwmrc

এটি নিশ্চিত করবে যে আমরা এবং আমাদের ইউজারগ্রুপের যেকোনো কেউ এই ফাইল এক্সিকিউট করতে পারবে।

এরপর, আমরা এখন bspwmrc ফাইল খুলতে পারি। আমার কেসে, আমি vim ব্যবহার করব আমার কনফিগারেশন ফাইল এডিট করতে। সেটির জন্য আমি নিচের কমান্ড টাইপ করব:

vim /home/$USER/.config/bspwm/bspwmrc

এটি একটি খালি ফাইল খুলবে এবং আমরা এখন আমাদের কনফিগারেশন লিখতে শুরু করতে পারি।

bspwm কনফিগার করা

bspwm-এর একটি বেসিক কনফিগারেশন কিছুটা এভাবে দেখায়:

#!/bin/bash
xsetroot -cursor_name left_ptr
sxhkd &
bspc config border_width 2
bspc config window_gap 0
bspc config split_ratio 0.62
bspc config focus_follows_pointer true
bspc config pointer_modifier mod1
bspc config automatic_scheme spiral
bspc rule -a Chromium desktop='^2'
bspc rule -a Gimp desktop='^8' state=floating follow=on

প্রথম লাইনে শিব্যাং ইন্ডিকেট করে যে এই কনফিগারেশন Bash-এ লেখা। প্রথম কয়েকটি কমান্ড হলো সেসব প্রোগ্রাম যা আমি bspwm-এর যেকোনো কনফিগারেশন সেট করার আগে চালাতে চেয়েছিলাম।

প্রথমটি, xsetroot, ডিফল্ট X কার্সরকে більш পরিচিত লেফট পয়েন্টারে পরিবর্তন করে। দ্বিতীয়টি আমাদের হটকি ডেমনকে ব্যাকগ্রাউন্ডে ইনিশিয়ালাইজ করে।

bspc config এবং bspc rule

কনফিগারেশনে পরের কমান্ডগুলো bspc-স্পেসিফিক। bspc config উইন্ডো ম্যানেজারের জেনারেল কনফিগারেশন নিয়ে কাজ করে। এতে এস্থেটিক এবং ফাংশনাল সেটিং দুটোই থাকে।

  • border_width নির্ধারণ করে উইন্ডোর বর্ডার ওয়ธের মোটা, পিক্সেলে।
  • window_gap উইন্ডোর চারপাশে গ্যাপের পরিমাণ নিয়ন্ত্রণ করে, পিক্সেলে।
  • split_ratio স্প্লিট হওয়ার সময় দুটি লিফ নোডের মধ্যে অনুপাত নির্ধারণ করে।
  • focus_follows_pointer সেট করে যে মাউস পয়েন্টার কি কোন উইন্ডো ফোকাস পাবে সেটি কন্ট্রোল করতে পারে।
  • pointer_modifier নির্ধারণ করে কীবোর্ড কী দিয়ে মাউস ব্যবহার করে উইন্ডো রিসাইজ করা যাবে।
  • automatic_scheme নির্ধারণ করে অটোমেটিক মোডে স্প্লিট হওয়ার সময় উইন্ডো লেআউট।

bspc rule, অন্যদিকে, প্রোগ্রামের আচরণ নিয়ে কাজ করে যখন bspwm-এ ওপেন করা হয়।

  • আমাদের উদাহরণ কনফিগারেশনের প্রথম রুল Chromium-কে দ্বিতীয় ডেস্কটপে চালানোর জন্য বাধ্য করে।
  • দ্বিতীয় রুল Gimp-কে অষ্টম ডেস্কটপে চালানোর জন্য বাধ্য করে। এটি Gimp-কে ফ্লোটিং স্টেটে চালানোর জন্য বাধ্য করে ডিফল্ট টাইলডের বদলে। শেষে, এটি Gimp লোড হলে উইন্ডো ফোকাস বাধ্য করে।

এভাবে, এখন আমাদের bspwm-এর জন্য একটি বেসিক কনফিগারেশন আছে। লক্ষ্য করুন, যdır করুন, bspc config এবং bspc rule-র অপশনগুলো ব্যাপক। আপনি যদি আপনার bspwmrc ফাইন-টিউন করতে চান, GitHub ডকুমেন্টেশন চেক করুন সকল সম্ভাব্য সেটিংয়ের পূর্ণ তালিকার জন্য।

sxhkd: bspwm-এর জন্য কিবাইনডিং ইউটিলিটি

sxhkd একটি সহজ প্রোগ্রাম। এটি কীবোর্ড ইনপুট ইভেন্ট শোনে এবং কমান্ড এক্সিকিউট করে আপনি যে কীগুলো চাপেছেন তার ভিত্তিতে। এটি মাল্টি-কী ইনপুট ডিল করতে পারে চোর্ডিং এর মাধ্যমে এবং এর একটি ইন্টুইটিভ কনফিগারেশন ফাইল রয়েছে যা সহজ এবং বুঝতে সহজ।

sxhkd-এর জন্য কনফিগারেশন ফাইল তৈরি করা

sxhkd-এর জন্য কনফিগারেশন ফাইল তৈরি করা bspwmrc ফাইল সেট আপ করার মতো। প্রথমে, sxhkd-এর জন্য কনফিগারেশন ফোল্ডার এবং ফাইল তৈরি করতে হবে। সেটি করতে নিচের কমান্ড টাইপ করুন:

mkdir -p /home/$USER/.config/sxhkd/ && touch /home/$USER/.config/sxhkd/sxhkdrc

আমরা, তারপর, sxhkdrc ফাইলকে এক্সিকিউটেবল করতে হবে:

sudo chmod 774 /home/$USER/.config/sxhkd/sxhkdrc

হয়ে গেলে, এখন আমাদের sxhkd কনফিগারেশন ফাইল আছে আমাদের সকল কিবাইনডিং ইনসার্ট করার জন্য।

sxhkd কনফিগার করা

sxhkd কিবাইনডিং একটি নির্দিষ্ট প্যাটার্নে রিকগ্নাইজ করে। এটি প্রথমে একটি মডিফায়ার কী চায়। এটি হতে পারে Alt, Super, Hyper বা Control। এরপর, আপনাকে একটি নরমাল কী দিতে হবে আপনার মডিফায়ার কীর সাথে কমপ্লিমেন্ট করার জন্য। সেটি তারপর কমবাইন হতে পারে একটি কিবাইনডিং হওয়ার জন্য + চিহ্ন যোগ করে সেই দুটি কীর মাঝপথে।

তাই, sxhkd কিবাইনডিং-এর জেনারেল ফর্ম এভাবে দেখায়:

modifier key + normal key (+ {_, additional, keys})

হয়ে গেলে, আপনাকে Enter এবং Tab চাপতে হবে কিবাইনডিং-এর নিচে একটি ইন্ডেন্টেড লাইন তৈরি করার জন্য। এরপর, আপনাকে সেই কমান্ডটি স্পেসিফাই করতে হবে যা আপনি এক্সিকিউট করতে চান যখন কিবাইনডিং চাপা হবে।

sxhkd-এর জন্য একটি উদাহরণ কনফিগারেশন ফাইল কিছুটা এভাবে দেখায়:

# make sxhkd reload its configuration files
alt + Escape
    pkill -USR1 -x sxhkd
# quit or restart bspwm
alt + shift + {q,r}
    bspc {quit,wm -r}
# create a new terminal window or swap the current one to the biggest one in the screen
alt + {_,shift + }Return
    {st, bspc node -s biggest.local}
# close or kill a window
alt + {_,shift + }c
    bspc node -{k,c}
# change the window state
alt + {t,ctrl + t,l,f}
    bspc node -t {tiled,pseudo_tiled,floating,fullscreen}
# expand a window by moving one of its side outward
super + alt + {h,j,k,l}
    bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0}
# focus or send a window to the given desktop
alt + {_,shift + }{1-9,0}
    bspc {desktop -f,node -d} '^{1-9,10}'

কিবাইনডিং সিনট্যাক্স ব্যাখ্যা

উপরোক্ত আলোচনামতে বলা হয়েছে, sxhkd-এর কিবাইনডিং সিনট্যাক্স তুলনামূলকভাবে সহজ। আরও, sxhkd কিবাইনডিং গ্রুপ করতে পারে এবং ব্রাঞ্চিং কমান্ড এক্সিকিউট করতে পারে কী চোর্ডিং ব্যবহার করে।

উদাহরণস্বরূপ, এই কনফিগারেশনে অনেক কমান্ড কার্লি ব্রেস ব্যবহার করে। এটি আমাদের একই ধরণের কিবাইন্ডে একাধিক ফাংশন অ্যাসাইন করতে দেয়। এই কমান্ডটি বিবেচনা করুন কনফিগারেশনে:

alt + shift + {q,r}
    bspc {quit, wm -r}

এই কমান্ডটি bspwm ক্লোজ এবং রিস্টার্ট নিয়ে কাজ করে। কিবাইনডিং-এ কার্লি ব্রেসেস কমান্ড লাইনে থাকা কার্লি ব্রেসেসের সাথে ম্যাচ করে। তাই, যখন আমরা Alt + Shift + Q চাপব কীবোর্ডে, কমান্ড: bspc quit এক্সিকিউট হবে। কিন্তু Alt + Shift + R চাপলে bspc wm -r এক্সিকিউট হবে।

আমরা ব্রাঞ্চিং-এ অতিরিক্ত কী প্রদানের প্রয়োজন বাইপাস করতে পারি। এই উদাহরণটি বিবেচনা করুন:

alt + {_,shift + }Return
    {st, bspc node -s biggest.local}

এই কমান্ডটি টার্মিনাল স্পন করার সাথে কাজ করে। এটি ডেস্কটপে উইন্ডো সওয়াপও করে। আমি প্রথম কমান্ডটি করতে পারি Alt + Enter চাপা এবং দ্বিতীয় কমান্ডটি Alt + Shift + Enter চাপা।

এটি হয় কারণ আন্ডারস্কোর ক্যারেক্টার কিবাইনডিং-এ পাস-থ্রু হিসেবে কাজ করে। এটি আমাদের একটি ডিফল্ট কিবাইনডিং রাখতে দেয় একটি কমান্ডের জন্য কিন্তু একটি "মডিফাইড" কিবাইনডিংও থাকে অন্যান্য কমান্ডের জন্য।

শেষে, sxhkd একটি সিঙ্গেল ব্রাঞ্চিং-এ সীমাবদ্ধ নয়। এই উদাহরণটি বিবেচনা করুন:

alt + {_,shift + }{1-9,0}
    bspc {desktop -f,node -d} '^{1-9,10}'

এই কমান্ডটি ডেস্কটপ স্যুইচিং নিয়ে কাজ করে। এটি সেই ডেস্কটপের ভিতরে উইন্ডো মুভমেন্টও ম্যানেজ করে। প্রথম কমান্ড এক্সিকিউট হয় যখন আপনি Alt + 1–0 চাপেন যখন দ্বিতীয়টি Shift মডিফায়ার কী দিয়ে করা হয়।

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

ইনস্টলেশন ফাইনালাইজ করা

এভাবে, এখন আমাদের bspwm এবং sxhkd কনফিগার করার বেসিক ধারণা আছে। শেষ কাজ হলো bspwm কে আমাদের উইন্ডো ম্যানেজার হিসেবে ইনেবল করা। আপনি এটি সরাসরি Xorg-এর মাধ্যমে বা আপনার ডিসপ্লে ম্যানেজারের মাধ্যমে করতে পারেন।

xinitrc ব্যবহার করে bspwm চালানো

bspwm ইনিশিয়ালাইজ করার সবচেয়ে সহজ পদ্ধতি হলো আপনার .xinitrc ফাইলে এপেন্ড করা। আপনি যদি একটি মিনিমাল লিনাক্স ডিস্ট্রিবিউশন ব্যবহার করেন তবে এটি সম্ভবত যে পদ্ধতিটি আপনি ইতিমধ্যে ব্যবহার করছেন উইন্ডো ম্যানেজার লোড করার জন্য।

সেটি করতে, আপনাকে শুধু আপনার .xinitrc-এর শেষ লাইনে নিচেরটি এপেন্ড করতে হবে:

exec bspwm

ডিসপ্লে ম্যানেজার ব্যবহার করে bspwm চালানো

তবে, আপনি যদি একটি ফুল-ফিচার্ড ডেস্কটপ ব্যবহার করেন যেমন Linux Mint বা Ubuntu তবে আপনাকে আপনার লগইন স্ক্রিনে bspwm সিলেক্ট করতে হতে পারে।

উদাহরণস্বরূপ, আমার Ubuntu ইনস্টলেশনে मुझे লগইন স্ক্রিনে গিয়ার আইকনে ক্লিক করতে হয় এবং কনটেক্সট মেনু থেকে bspwm সিলেক্ট করতে হয় সেটি লোড করার জন্য।

অভিনন্দন! এখন আপনার একটি ওয়ার্কিং bspwm ইনস্টলেশন আছে। আপনি এখন আপনার ডেস্কটপ আরও কাস্টমাইজ করতে পারেন আপনার কনফিগারেশন ফাইল টвиক করে এবং থার্ড-পার্টি ডক ইনস্টল করে। এখানে কিছু কাস্টমাইজড ডেস্কটপ আছে আপনাকে অনুপ্রেরণা দেওয়ার জন্য।

প্রশ্নোত্তর

১. প্রথমবার লগইন করলে আমার স্ক্রিন কালো কেন?

সম্ভবত কারণ আপনি এখনো ডেস্কটপ ব্যাকগ্রাউন্ড সেট করেননি। এটি প্রায়শই হয় যদি আপনি একটি মিনিমাল ইনস্টলেশন চালান। আপনি আপনার ব্যাকগ্রাউন্ড থিম পরিবর্তন করতে পারেন একটি ইমেজ ভিউয়ার প্রোগ্রাম ব্যবহার করে যেমন feh।

২. আমার কিবাইনডিং কাজ করছে না কেন?

এটি সম্ভবত দুটি কারণের জন্য:

  • কিবাইনডিং লোড হয়নি কারণ sxhkd রান করছে না।
  • sxhkdrc-এ সিনট্যাক্স এরর ছিল। sxhkd কনফিগার করার সময় সবচেয়ে সাধারণ ভুল হলো ইন্ডেন্টের সাথে। কমান্ডগুলো সঠিকভাবে ইনিশিয়ালাইজ করতে, আপনাকে ট্যাব-স্পেস ইনসার্ট করতে হবে ইন্ডেন্টেড লাইনে।

৩. যখন আমি আমার সিস্টেমে লগইন করলাম, সেটি শুধু সিস্টেম প্রম্পটে ফিরিয়ে দিল।

এটি অনেক কারণে হতে পারে। তবে সবচেয়ে সাধারণ কারণ হলো .xinitrc ফাইলের সাথে একটি ইস্যু। আপনাকে নিশ্চিত করতে হবে যে bspwm Xorg যে শেষ প্রোগ্রাম লোড করে এবং সেটি ব্যাকগ্রাউন্ড প্রসেস হিসেবে রান করছে না।


  1. লিনাক্সে OpenRazer ইনস্টলেশন গাইড

  2. লিনাক্সে Openbox উইন্ডো ম্যানেজার ইনস্টল ও কনফিগার করার পদ্ধতি

  3. কালি লিনাক্স ইনস্টল করার পূর্ণ নির্দেশিকা

  4. লিনাক্সে Kodi ইনস্টল করার পদ্ধতি