মূল বিষয়ে

টিমাক্সের মক‍্শো: ১

লেখক

বিদেশি

সূচনা

লিনাক্স কিছুদিন ভালমত চালালেই বুঝে ফেলা যায় যে, ঝকমকে গ্রাফিক্সঅলা কোন হাইফাই ডেস্কটপ নয়, সাদামাটা টার্মিনালটাই এই রাজ্যের শাসক। প্রায়ই টুকটাক কমান্ড চালানোর জন্য টার্মিনাল উইন্ডো খুলতে হয়। হয়ত দেখা যায়, একগাদা টার্মিনাল উইন্ডো খুলে ডেস্কটপটাই ঘুটঘুটে অন্ধকার করে ফেলেছি। আবার এতগুলোর মধ্যে দরকারি টার্মিনালটা খুঁজে বের করতে গিয়ে Alt+Tab এর বারোটা বাজে। এই টার্মিনালগুলো সব যদি একসাথে সাজানো গোছানো থাকতো, কি সুবিধাই না হত, তাই না? তার সাথে টাইল করা রঙচঙে অ্যাডভান্স‍্ড টার্মিনাল দেখিয়ে সস্তায় পাতিহ্যাকার ভাবও নিতে পারি (শেষের স্ক্রিনশটটা দ্রষ্টব্য 😎)!
ঠিক এই কাজের জন্যই জনপ্রিয় অদ্বিতীয় একটা প্রোগ্রাম হচ্ছে টিমাক্স (tmux)। কিন্তু অধিকাংশ টার্মিনালভিত্তিক প্রোগ্রামগুলোর মতই এটাও নতুনদের কাছে স্বভাবসুলভ দুর্বোধ্য। এইখানে টিমাক্স চালানোর প্রাথমিক ধারণা তুলে ধরার চেষ্টা করছি।

প্রথমেই আপনার ডিস্ট্রোর জন্য tmux প্যাকেজটা ইনস্টল করে নিন। এবার একটা টার্মিনাল উইন্ডো ওপেন করে লিখুন exec tmux — ব্যাস tmux চালু হয়ে গেল।

“কিসের টিমাক্স কিসের কি? এতো আমার ডিফল্ট শেলই চলছে! ফ্রি সফটওয়্যার নিয়েও ভাঁওতাবাজি, তাই না?” শান্তি, শান্তি! শেলটা চলছে ঠিকই, কিন্তু তা আসলে চলছে টিমাক্সের ভেতরেই। স্ক্রিনের নিচে সবুজ স্ট্যাটাসবারটাই টিমাক্সের লক্ষণ। তাহলে চলুন দেখা যাক টিমাক্সের কেমনে কি।

বলে রাখা ভাল, টিমাক্সের কাজকর্ম মূলত কিবোর্ড দিয়েই হয়, তাই আপাতত মাউসটা বিড়ালের কাছে বর্গা দিলেও কোনই সমস্যা নেই। মাউস বেচে চা খাওয়ার পয়সা জোগানোর জন্যই tmux, vim, মায় লিনাক্স কনসোলের উৎপত্তি এমন একটা জনমত প্রচলিত আছে হয়ত।

প্রিফিক্স

তবে কথা হচ্ছে, কিবোর্ড মাউসের কর্মকাণ্ড তো সরাসরি টিমাক্সের ভেতরে চলমান প্রোগ্রামটায় চলে যায়। তাহলে টিমাক্সের নিয়ন্ত্রণ হবে কেমন করে? এজন্য একটা বিশেষ হটকি আছে, যা প্রেস করার পর তার পরবর্তী কিপ্রেসটা টিমাক্সের কাছে যায়। সাধারণত এই শর্টকাট হচ্ছে ctrl+b। এইটাকে বলে প্রিফিক্স কী। অতএব, এখন থেকে “প্রিফিক্স” বললে ctrl+b প্রেস করতে বলা হচ্ছে বুঝে নিতে হবে, ঠিক আছে? আচ্ছা। সামনে এগোই।

তো, টিমাক্সের সুবিধাটা কি? টিমাক্স নামটা এসেছে টার্মিনাল মাল্টিপ্লেক্সার থেকে, এখন এই মাল্টিপ্লেক্সিং কতটা ফ্লেক্সিবল তাই আবিষ্কার করবো।

পেন

প্রিফিক্স শর্টকাটটা একবার প্রেস করুন, তারপর %(মানে shift+5) টিপে দিন। আরে! পাশাপাশি দুইটা শেল চালু হয়ে গেল! এবারে প্রিফিক্স, " (প্রিফিক্স, তারপর shift+') দিয়ে দেখুন, ওপর নিচে ভাগ হয়ে শেল চালু হয়ে যাবে! এরকম কয়েকবার করে দেখুন, টার্মিনালটাকে ফ্লোরের মত টাইল করে ফেলতে মার্বেলের অভাব ছাড়া বিশেষ বাধা পাবেন না। আর এইযে একই উইন্ডোতে একাধিক শেল একই সময়ে চলছে — এই ঘটনাই হচ্ছে মাল্টিপ্লেক্সিং

হুজুগে মেতে উইন্ডোটাতো ভাগাভাগি করে ফেললাম, কিন্তু একেকটা শেলে ফোকাস করবো কিভাবে? খুব যৌক্তিকভাবে। প্রিফিক্স, up/​down/​left/​right — যে অ্যারোতে চাপ দেবেন, সেদিককার পেন ফোকাস হবে। ও হ্যাঁ, উইন্ডোটা যে একেকভাগে বিভক্ত হয়ে গেল তারাই একেকটা পেন (Pane)1

পেনের লেআউট একটু জটিল হয়ে উঠলে বারবার প্রিফিক্স,অ্যারো টেপা বিরক্তিকর। সেক্ষেত্রে, প্রিফিক্স,q দিয়ে পেনের নাম্বারগুলি কয়েক সেকেন্ডের জন্য প্রদর্শন করা যায়, আর এসময় কিবোর্ডে কোনো পেনের নাম্বারটা চেপে দিলেই সেটায় ফোকাস চলে যাবে। পেনে চলমান শেলে exit টাইপ করে বন্ধ করে দিলে পেনটাও বন্ধ হয়ে যাবে, অথবা প্রিফিক্স,x দিয়ে সরাসরিও বন্ধ করা যায়।

ওহো, পেন রিসাইজ করার কথাটা জানাতে ভুলে গেছি! এটাও খুব সোজা, একবার জানলে ভোলার সম্ভাবনা অল্প: প্রিফিক্স,ctrl+up/​down/​left/​right, মানে প্রিফিক্সের পর কন্ট্রোল সহ অ্যারো কী দিয়ে চারদিকে রিসাইজ করা যাবে। মানে প্রিফিক্সের পর শুধু অ্যারো কি দিয়ে ফোকাস পরিবর্তন, আর কন্ট্রোল+অ্যারো কি দিয়ে রিসাইজ।

আচ্ছা, একই সময় একাধিক পেন দেখতে পারার ফিচারটা কি কাজে লাগে? ধরুন ls দিয়ে কোন ফোল্ডারের লিস্ট দেখলাম, এখন তার মধ্যে কয়েকটা ফাইল cat করে দেখতে চাই। কিন্তু তাহলে তো ls এর আউটপুটটা হারিয়ে যাবে। এখন পাশাপাশি দুটো পেন খুলে একটায় ls এর আউটপুট দিয়ে ফাইলের লিস্টটা খুুলে রাখতে পারি, আর অন্যটায় মনের সুখে cat করে যাই। অথবা এককোণায় একটা পেনে mocp/​cmus ইত্যাদি খুলে গান শুনতে থাকলাম আর অন্যগুলিতে টার্মিনালের অন্য কাজ চালিয়ে যাই। অথবা পাশাপাশি পেনে দুটো ফাইল বা ফোল্ডার লিস্ট খুলে তুলনা করা… কত সুবিধা!

ট্যাব

শুধু কি পেন? টিমাক্সে ঠিক ওয়েবব্রাউজারের ট্যাবের সমতুল্য ব্যবস্থাও আছে, যাকে কিনা টিমাক্সের পরিভাষায় বলা হয় উইন্ডো 2 আগের অনুচ্ছেদ অনুসরণ করে থাকলে, আপনার টিমাক্স উইন্ডোতে বেশ কয়েকটা পেন খোলা থাকার কথা। এবারে প্রিফিক্স,c টিপে দিন তো… আরে, শেলগুলো সব হারিয়ে রিসেট হয়ে গেল তো! কোন গুরুত্বপূর্ণ কমান্ড চলছিল নাকি? 😅 না, আগের পেনগুলো অক্ষতই আছে, শুধু টাটকা নতুন একটা উইন্ডো তথা ট্যাব খুলে গেছে। স্ট্যাটাসবারে দেখুন, বাম কোণায় 1:, 2: লেখা। মানে দুটো উইন্ডো চলছে। নতুন এই উইন্ডোটায় আগেকার মতই ইচ্ছামত নতুন এক সেট পেন খুলে কাজ শুরু করে দিতে পারেন নিশ্চিন্তে।

প্রিফিক্স,n আর প্রিফিক্স,p — আগের আর পরের ট্যাবে যাওয়ার শর্টকাট। আরও সহজ উপায় হচ্ছে, প্রিফিক্স এর পর উইন্ডোর নাম্বারটা টিপে দেয়া (স্ট্যাটাসবারে প্রতিটা উইন্ডো/ট্যাবের নামের শুরুতে তার নাম্বার লেখা)। যেমন প্রথম উইন্ডোতে যেতে চাইলে প্রিফিক্স,0(শুন্য থেকে শুরু 🤓)।

কোন উইন্ডোতে যদি একটাই পেন থাকে, তাহলে ওই পেন বন্ধ করলে পুরো উইন্ডোটাই বন্ধ হয়ে যাবে। আর প্রিফিক্স,& হচ্ছে বর্তমান উইন্ডোটা তার অন্তর্ভুক্ত সবগুলি পেনসহ একেবারে বন্ধ করে দেয়ার শর্টকাট।

স্ক্রল ও কপি মোড

আচ্ছা, শুধু টিমাক্সের বাইরের রূপে বিভোর হয়ে থাকলেই তো জগত চলবে না, ভেতরটাও মাঝেমধ্যে দেখতে হয়। যেমন কখনও কখনও পুরানো কোন কমান্ডের আউটপুট ইতিহাস জানার জন্য স্ক্রল করারও দরকার হয়। সাধারণত টার্মিনাল এমুলেটরে page up বা shift+page up দিয়ে স্ক্রল করতে পারি। একইভাবে টিমাক্সে প্রিফিক্স,page up দিয়ে স্ক্রলিং মোড চালু হয়ে যাবে। এখন কেবল স্ক্রল করা যাবেে, ইনপুট দেয়া যাবে না। আবার টিমাক্সের স্বাভাবিক অবস্থায় ফিরে যেতে চাইলে শুধু হালকা করে q প্রেস করে দিলেই হল।

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

কপি মোডের কর্মকাণ্ডের সারাংশ হচ্ছে: প্রিফিক্স,[ দিয়ে কপি মোড চালু, space দিয়ে কপি করা শুরু, আর enter দিয়ে শেষ। কপি মোডে টেক্সট সার্চও করা সম্ভব। সার্চের শর্টকাটগুলো ভিম‑এর মত, যেমন / প্রেস করে কিছু লিখে দিলে তা সার্চ করবে, n আর shift+n দিয়ে আগের ও পরের সার্চ রেজাল্টের অবস্থানে যাবে, ইত্যাদি3

কোন টেক্সট কপি করে প্রিফিক্স,] দিয়ে কপি হওয়া টেক্সট টিমাক্সের ভিতর চলমান যেকোন শেল প্রোগ্রামের ভেতর পেস্ট করে দেয়া যায় (তবে সেই প্রোগ্রাম আদৌ পেস্টের উপযুক্ত কিনা সেই চিন্তা টিমাক্স করতে যায় না; বেশি চিন্তা করা ঠিক না)। মজার ব্যাপার হচ্ছে শুধু টার্মিনালের টেক্সট আউটপুট না, যেকোন প্রোগ্রাম চালু রেখে স্ক্রিনে যা দেখা যাচ্ছে তার সবই কপি করা সম্ভব। যেমন top বা htop কমান্ডের ডিসপ্লে, তার ঝকঝকে স্টাইল কোডসহ।

সেশন

যেকোন পেনে tmux kill-session (বা tmux kill-server) কমান্ডটা দিয়ে সম্পূর্ণ টিমাক্স সেশনটা একবারে বন্ধ করে ফেলা যায়। কিন্তু একাজের জন্য এত কষ্ট কেন? টার্মিনাল উইন্ডোটা ক্লোজ করে দিলেই তো চলে। না, এই কাজ করলে ব্যাকগ্রাউন্ডে টিমাক্স সেশনটা চলতেই থাকবে! এটা টিমাক্সের আরেকটা ফিচার: ক্লায়েন্ট‑সেশন‑সার্ভার রীতি অনুসরণ করে চলে। টার্মিনালটা টিমাক্সের একটা ফ্রন্ট‑এন্ড শুধু। ঘটনাটা আরেকটু ভালভাবে বোঝার জন্য নতুন আরেকটা টার্মিনাল এমুলেটর উইন্ডো খুলে সেখানে tmux attach-session কমান্ডটা দিয়েই দেখুন, আগের টার্মিনালের সবকিছু ঠিকঠাক ক্লোন হয়ে ফিরে আসবে, যেন কিছুই হয়নি! টার্মিনাল শেয়ারিংয়ের জন্য এই ফিচার মহা সুবিধাজনক। যাহোক, এটা টিমাক্সের অন্যতম আকর্ষণীয় ফিচার, তবে প্রাথমিক পাঠের জন্য ইতোমধ্যেই অনেক বেশি কথা বলা হয়ে গেছে, তাই এটা নিয়ে পরে কোনদিন বিস্তারিত আলোচনা করা যাবে। এখানে শুধু সংক্ষেপে বলে রাখি: tmux detach-session কমান্ড অথবা প্রিফিক্স,d দিয়ে সেশন চালু রেখে বেরিয়ে আসা যায়; tmux list-session দিয়ে চলমান সেশনগুলোর লিস্ট দেখা, এবং tmux attach-session -t সেশন-নাম্বার ও tmux kill-session -t সেশন-নাম্বার কমান্ড দিয়ে নির্দিষ্ট সেশন পুনর্বহাল করা বা বন্ধ করে দেয়া যায়।

আরও শর্টকাট

এখন কিছু দরকারি শর্টকাটের লিস্ট দিয়ে দিচ্ছি:

ctrl+b = prefix ডিফল্ট প্রিফিক্স শর্টকাট
prefix,%/​" নতুন পেন তৈরি
prefix,x পেন বন্ধ করা
prefix,c নতুন উইন্ডো তৈরি
prefix,& উইন্ডো ধ্বংস করা
prefix, পেনের ফোকাস পরিবর্তন
prefix,ctrl+ পেনের আকার পরিবর্তন
prefix,q পেন নম্বর দেখানো
prefix,q,number নম্বর অনুযায়ী পেনে যাওয়া
prefix,number নম্বর অনুযায়ী উইন্ডোতে যাওয়া
prefix,n/​p আগের বা পরের উইন্ডোতে যাওয়া
prefix,; সর্বশেষ ফোকাস হওয়া পেনে ফেরত যাওয়া
prefix,l সর্বশেষ ফোকাস হওয়া উইন্ডোতে ফেরত যাওয়া
prefix,! বর্তমান পেনকে নতুন উইন্ডোতে পরিণত করা
prefix,}/​{ পরপর দুটি পেনের জায়গাবদল
prefix,z বর্তমান পেনকে ফুলস্ক্রিন করা অথবা পূর্বাবস্থায় ফেরানো
prefix,o চক্রাকারে পেনের ফোকাস পরিবর্তন
prefix,ctrl+o চক্রাকারে পেনগুলোর অবস্থান পরিবর্তন
prefix,E সবগুলো পেনের আকারে ভারসাম্য আনা
prefix,space পেনগুলো কিছু পূর্বনির্ধারিত লেআউটে সাজানো
prefix,s/​w ইন্টারঅ্যাক্টিভ উইন্ডো/পেন সার্চ (ওহাও!)
prefix,page up স্ক্রল (বা কপি মোড)
prefix,] কপি মোড (সার্চ বা কপির জন্য)
কপিমোডে space কপি করা শুরু
কপিমোডে enter কপি করা শেষ
কপিমোডে q কপি মোড বাতিল
কপিমোডে / সার্চ শুরু করা
কপিমোডে n/​shift+n আগের বা পরের সার্চ রেজাল্টে যাওয়া
prefix,] কপি করা লেখা পেস্ট করা
prefix,? সব শর্টকাটের তালিকা

চুপিচুপি আর একটা কথা জানিয়ে দিই: মাউসটা এখনও হাতের কাছে আছে কি? তাহলে, tmux set -g mouse on এই কমান্ডটা চালিয়ে টিমাক্সে পেন ফোকাস, রিসাইজ , স্ট্যাটাসবার থেকে ট্যাব সিলেক্ট, এবং স্ক্রল ও টেক্সট সিলেক্ট ইত্যাদি কাজে মাউসটার সাহায্য নেয়ার সুযোগ পাবেন!

একাধারে অনেক কিছু বলা হল, টেক্সটের দেয়াল হয়ে গেছে। আজ আর টিমাক্স নিয়ে টানাটানি করছি না, আগামীতে কোন দিন সুবিধাজনক সেটিংস, প্লাগইন, সামান্য সাজগোজ, রিমোট কন্ট্রোল ইত্যাদি নিয়ে আলাপ করা যাবে।

random panes opened in tmux
গিকারি,অথবা পাতিহ্যাকারি


  1. বুঝলেন তো? window panes: জানালার শার্সি!
  2. বিষয়টা জটিল লাগত পারে: টার্মিনাল এমুলেটরের গ্রাফিকাল উইন্ডোতে টিমাক্স চলছে। আর টিমাক্সের মধ্যে ট্যাবগুলিকেও আবার উইন্ডেো বলে। আসলে বর্তমান গ্রাফিকাল উইন্ডোর বোঝাতে “উইন্ডো” শব্দটা প্রচলিত হয়ে ওঠার আগে শব্দটা অন্যান্য ধারণা প্রকাশে ব্যবহার করা হত, টিমাক্সেও উইন্ডো শব্দটা সেই পুরাতন একটা অর্থে চলে আসছে।
  3. emacs এর মত শর্টকাটের ব্যবস্থাও রয়েছে, তবে টিমাক্সে ভিমেরটা ডিফল্ট হিসাবে থাকে। vim, tmux, zsh: টার্মিনালের ত্রিরত্ন কিনা।

অবস্থান:

আগের লেখা

আর্চলিনাক্সের কাস্টম প্যাকেজ রিপোজিটরি

পরের লেখা

টিমাক্সের মক‍্শো: ২