VPS-এ OpenCode সেটআপ করার নিয়ম
আপনার VPS-এ OpenCode ইনস্টল করার সঠিক পদ্ধতি জানুন। নিরাপত্তার জন্য আনপ্রিভিলেজড ইউজার ব্যবহার, tmux সেশন কনফিগারেশন এবং API কি সুরক্ষিত রাখার পূর্ণাঙ্গ নির্দেশিকা এখানে দেওয়া হলো।
OpenCode কী এবং আপনি কী সেটআপ করছেন
OpenCode হলো টার্মিনালের জন্য তৈরি একটি ওপেন সোর্স AI কোডিং এজেন্ট। আপনি এটিকে একটি প্রজেক্ট ডিরেক্টরির ভেতরে চালু করেন এবং এটি আপনার কোড পড়ে, পরিবর্তনের প্রস্তাব দেয়, ফাইল এডিট করে এবং কমান্ড চালায়—সবই একটি টার্মিনাল ইউজার ইন্টারফেস (TUI) থেকে। এটি MIT লাইসেন্সপ্রাপ্ত, এটি 75টিরও বেশি মডেল প্রোভাইডারের সাথে সংযুক্ত হতে পারে এবং 2026 সালের মাঝামাঝি পর্যন্ত প্রায় 165,000 GitHub স্টার নিয়ে এটি বর্তমানে সবচেয়ে জনপ্রিয় ওপেন সোর্স কোডিং এজেন্ট। একটি VPS-এ OpenCode চালানোর জন্য, আপনি এটিকে একটি ডেডিকেটেড আনপ্রিভিলেজড (unprivileged) ইউজারের অধীনে ইনস্টল করবেন, আপনার মডেল API কি (key) একটি প্রাইভেট ফাইলে রাখবেন এবং এটিকে tmux-এর ভেতরে চালু করবেন যাতে আপনার কানেকশন বিচ্ছিন্ন হলেও সেশনটি টিকে থাকে। এই নির্দেশিকাটি ঠিক সেই কাজটিই সেই ক্রমানুসারে সম্পন্ন করে।
নামকরণ সংক্রান্ত একটি বিষয় বিভ্রান্তি এড়াতে সাহায্য করবে। মূল রিপোজিটরি হলো anomalyco/opencode, যা Anomaly টিম (পূর্বে SST নামে পরিচিত) রক্ষণাবেক্ষণ করে এবং প্রজেক্টটি আগে sst/opencode-এ ছিল। GitHub-এ opencode-ai/opencode নামে একটি পুরোনো এবং সম্পর্কহীন রিপোজিটরিও রয়েছে, তাই নিশ্চিত হয়ে নিন যে আপনি সঠিক প্রজেক্টের ডকুমেন্টেশন পড়ছেন। অফিসিয়াল সাইট হলো opencode.ai।
কেন VPS-এ OpenCode চালাবেন
একটি কোডিং এজেন্টের সেশন দীর্ঘস্থায়ী হয়। OpenCode কোনো রিফ্যাক্টর বা টেস্ট স্যুট সম্পন্ন করতে অনেক মিনিট সময় নিতে পারে। এটি আপনার ল্যাপটপে চললে, ল্যাপটপের ঢাকনা বন্ধ করলে বা Wi-Fi সংযোগ বিচ্ছিন্ন হলে সেশনটি মাঝপথেই বন্ধ হয়ে যায়। tmux-এর ভেতরে একটি VPS-এ চালালে, আপনি সংযোগ বিচ্ছিন্ন করার পরেও এজেন্ট তার কাজ চালিয়ে যেতে পারে এবং পরবর্তীতে পুনরায় যুক্ত হয়ে আপনি তার কাজের ফলাফল দেখতে পারেন। এটি tmux ব্যবহার করে VPS-এ Claude Code চালানোর মতোই একটি পদ্ধতি এবং ল্যাপটপ থেকে এজেন্টকে সরিয়ে নেওয়ার ক্ষেত্রে এটিই সবচেয়ে বড় সুবিধা।
দ্বিতীয় কারণটি হলো অবস্থান। একটি VPS আপনার ডেপ্লয় করা কোডের কাছাকাছি থাকে: রিপোজিটরি, বিল্ড টুলস, টেস্ট ডেটাবেস এবং অনেক সময় স্টেজিং এনভায়রনমেন্ট সেখানেই বা তার পাশেই থাকে। যে এজেন্ট কোড এডিট করে এবং টেস্ট চালায়, সেটি সেই মেশিনে সবচেয়ে ভালো কাজ করে যেখানে টেস্টগুলো প্রকৃতপক্ষে রান করে। যেহেতু এই সার্ভারটি আপনার নিয়ন্ত্রণে, তাই আপনি এজেন্টকে একটি নির্দিষ্ট ও নিয়ন্ত্রিত এনভায়রনমেন্ট দিতে পারেন, যা পরবর্তী সেকশনে দেখানো হয়েছে।
আপনি যদি এখনও টুল নির্বাচন করে না থাকেন, তবে VPS-এ কোডিং AI এজেন্ট চালানো নিবন্ধটি Aider এবং Goose সহ অন্যান্য টুলের সাথে তুলনা করে সিদ্ধান্ত নিতে সাহায্য করবে।
OpenCode-এর জন্য আলাদা ইউজার তৈরি করুন
এখানেই সততার সাথে শুরু করা যাক: একটি কোডিং এজেন্ট ফাইল এডিট করে এবং কমান্ড চালায়। এটিই তার কাজ, এবং এটিই ঝুঁকির কারণ। OpenCode বিল্ড, টেস্ট এবং কাজের প্রয়োজনে যেকোনো শেল কমান্ড চালাবে, আর মডেলের বিচারবুদ্ধি ভালো হলেও নিখুঁত নয়। এজেন্টটি যে অ্যাকাউন্টের অধীনে চলে, সেই অ্যাকাউন্টের ক্ষমতাই হলো ক্ষতিকর কমান্ডের সর্বোচ্চ সীমা। তাই এটিকে root হিসেবে চালাবেন না এবং সার্ভার অ্যাডমিনিস্ট্রেটরের ইউজার দিয়েও চালাবেন না।
ব্যাকগ্রাউন্ড এজেন্টের বিপরীতে, OpenCode ইন্টারঅ্যাক্টিভ, তাই এর ইউজারের একটি রিয়েল শেল এবং হোম ডিরেক্টরি প্রয়োজন:
sudo useradd --create-home --shell /bin/bash opencode
sudo -iu opencodeযে প্রজেক্টগুলোতে আপনি এটিকে কাজ করাতে চান, সেগুলো /home/opencode-এর অধীনে রাখুন এবং সেই ইউজার দিয়েই ক্লোন করুন। এই অ্যাকাউন্টটিকে কোনো sudo অধিকার দেবেন না। যদি এজেন্ট কোনো ধ্বংসাত্মক কমান্ড চালায়, তবে এটি কেবল এই অ্যাকাউন্টের মালিকানাধীন ফাইলগুলোই নষ্ট করতে পারবে। এটি unprivileged user হিসেবে সার্ভিস চালানোর মতোই একটি যুক্তি। এছাড়া একটি git রিপোজিটরির ভেতরে কাজ করুন, কারণ একটি রিপোজিটরি যেকোনো ভুল এডিটকে স্থায়ী ক্ষতির পরিবর্তে একটি git revert-এ পরিণত করে।
OpenCode ইনস্টল করা
এই প্রজেক্টে দুটি ইনস্টলেশন পদ্ধতির কথা উল্লেখ আছে। ইনস্টল স্ক্রিপ্টটি সবচেয়ে দ্রুত কাজ করে এবং এটি opencode ইউজার হিসেবে চালালে সবকিছু ওই ইউজারের হোম ডিরেক্টরির ভেতরেই থাকে:
curl -fsSL https://opencode.ai/install | bashযেকোনো সার্ভারের ক্ষেত্রে যে সাধারণ curl | bash অভ্যাসটি মেনে চলা উচিত, এখানেও তা প্রযোজ্য: গুরুত্বপূর্ণ সার্ভারে কোনো স্ক্রিপ্ট চালানোর আগে তা ডাউনলোড করুন, পড়ুন এবং তারপর চালান। ইনস্টলেশন শেষ হলে নতুন একটি শেল চালু করুন যাতে ইনস্টলারের করা PATH পরিবর্তনটি কার্যকর হয়, এরপর বাইনারিটি কাজ করছে কি না তা যাচাই করুন:
opencode --versionআপনি যদি প্যাকেজ ম্যানেজার পছন্দ করেন এবং সার্ভারে আগে থেকেই Node.js ইনস্টল করা থাকে, তবে npm পদ্ধতি ব্যবহার করে টুলটি সিস্টেম-ব্যাপী ইনস্টল করতে পারেন। এটি opencode বাইনারিটিকে সকল ইউজারের জন্য PATH-এ যুক্ত করে দেয়:
sudo npm install -g opencode-aiউভয় ক্ষেত্রেই যাচাই করার পদ্ধতি একই: opencode --version কমান্ডটি একটি ভার্সন নম্বর দেখাবে। স্ক্রিপ্ট ইনস্টলের পর command not found দেখালে বুঝতে হবে বর্তমান শেলটি আপডেট হওয়া PATH এখনো রিড করেনি, তাই লগ আউট করে পুনরায় opencode ইউজার হিসেবে লগ ইন করুন।
API key-কে একটি ব্যক্তিগত ফাইলে রাখুন
OpenCode-এর জন্য আপনার ব্যবহৃত মডেল প্রোভাইডারের একটি key প্রয়োজন, এবং এই key ব্যবহার করে আপনার অর্থ খরচ হতে পারে, তাই এটিকে পাসওয়ার্ডের মতো সতর্কতার সাথে ব্যবহার করুন। এমন একটি ফাইল তৈরি করুন যা শুধুমাত্র opencode ইউজার পড়তে পারে, যার মোড হবে 600। কমান্ডে সরাসরি key টাইপ করার পরিবর্তে এই ফাইলে রাখুন, কারণ কমান্ডে টাইপ করলে তা আপনার shell history-তে জমা হয়ে যায়:
install -m 600 /dev/null ~/opencode.env
nano ~/opencode.envএতে আপনার প্রোভাইডারের ভেরিয়েবলটি রাখুন, উদাহরণস্বরূপ ANTHROPIC_API_KEY=... বা আপনার প্রোভাইডারের জন্য সমতুল্য কোনো ভেরিয়েবল, কারণ OpenCode স্ট্যান্ডার্ড প্রোভাইডার এনভায়রনমেন্ট ভেরিয়েবলগুলো গ্রহণ করে। এজেন্ট শুরু করার আগে আপনার shell-এ ফাইলটি লোড করুন:
set -a; source ~/opencode.env; set +aOpenCode-এ একটি ইন্টারঅ্যাক্টিভ বিকল্পও রয়েছে: TUI-এর ভেতরে থাকা /connect কমান্ডটি আপনাকে প্রোভাইডার যোগ করার প্রক্রিয়ায় সহায়তা করবে এবং ক্রেডেনশিয়ালটি ইউজারের home ডিরেক্টরিতে ~/.local/share/opencode/auth.json ফাইলে সংরক্ষণ করবে। যদি আপনি এই পদ্ধতি ব্যবহার করেন, তবে chmod 600 ~/.local/share/opencode/auth.json কমান্ড দিয়ে নিশ্চিত করুন যে ফাইলটি ব্যক্তিগত (private) রয়েছে। উভয় পদ্ধতিই আপনার কমান্ড লাইন থেকে key-কে সুরক্ষিত রাখে; যেকোনো একটি বেছে নিন এবং সেটিই অনুসরণ করুন।
tmux-এর ভেতরে OpenCode শুরু করা
VPS সেটআপের আসল সুবিধা হলো tmux, কারণ SSH সংযোগ বিচ্ছিন্ন হলেও tmux সেশন সচল থাকে। একটি সেশন শুরু করুন, আপনার প্রজেক্ট ডিরেক্টরিতে যান এবং এজেন্ট চালু করুন:
tmux new -s opencode
cd ~/my-project
opencodeআপনি দেখবেন TUI খুলে গেছে, নিচে একটি প্রম্পট আছে এবং ইন্টারফেসে আপনার প্রজেক্টের নাম দেখা যাচ্ছে। সাধারণ ভাষায় এটিকে একটি কাজ দিন, এটি ফাইলগুলো পড়া শুরু করবে এবং পরিবর্তনের প্রস্তাব দেবে। আপনি যখন বেরিয়ে যেতে চাইবেন, তখন Ctrl-b এবং তারপর d চেপে detach করুন; আপনার ল্যাপটপ বন্ধ থাকলেও এজেন্ট কাজ চালিয়ে যাবে। পরে পুনরায় যুক্ত হতে এটি ব্যবহার করুন:
tmux attach -t opencodeসেশন, কথোপকথন এবং চলমান যেকোনো কাজ ঠিক সেখানেই থাকবে যেখানে আপনি রেখে গিয়েছিলেন। সংযোগ বিচ্ছিন্ন হলেও এটি টিকে থাকে, কিন্তু সার্ভার রিবুট হলে তা হয় না; তাই রিবুট করার পর আপনাকে একইভাবে নতুন একটি tmux সেশন শুরু করতে হবে। আপনি চাইলে দ্বিতীয় একটি tmux উইন্ডো খুলে প্রথমটির পাশাপাশি আরেকটি এজেন্ট চালাতে পারেন। তবে OpenCode সেশনগুলো একে অপরের থেকে স্বাধীন থাকে, যেখানে একই সার্ভারে থাকা Claude Code সেশনগুলো একে অপরকে বার্তা পাঠাতে পারে, যা কাজ ভাগ করার একটি ভিন্ন পদ্ধতি।
একটি মডেলের দিকে নির্দেশ করুন
OpenCode প্রোভাইডার নিরপেক্ষ। এটি AI SDK এবং Models.dev ক্যাটালগ ব্যবহার করে 75টিরও বেশি প্রোভাইডারকে সমর্থন করে। ফলে একই টুল Anthropic, OpenAI, Google এবং অন্যান্য অনেক প্রোভাইডারের সাথে কাজ করে, যার মধ্যে লোকাল সার্ভারও অন্তর্ভুক্ত। দ্রুততম উপায় হলো TUI-এর ভেতরে /connect কমান্ডটি ব্যবহার করা, যা প্রোভাইডারদের তালিকা দেখায় এবং ক্রেডেনশিয়াল ম্যানেজ করে। এমন সেটআপের জন্য যা আপনি কমিট এবং পুনরায় তৈরি করতে পারবেন, প্রজেক্টের রুটে একটি opencode.json ফাইল রাখুন এবং মডেলটিকে provider/model-id হিসেবে সেট করুন:
{
"$schema": "https://opencode.ai/config.json",
"model": "anthropic/claude-sonnet-4-20250514"
}একটি লোকাল মডেলও একই ফাইলের মাধ্যমে কাজ করে, কারণ যেকোনো OpenAI-সামঞ্জস্যপূর্ণ সার্ভারকে প্রোভাইডার হিসেবে ঘোষণা করা যায়। আপনি যদি একই VPS-এ Ollama ব্যবহার করে কোনো মডেল সার্ভ করেন, তবে কনফিগারেশনটি এর লোকাল API-কে নির্দেশ করবে এবং মডেলের নাম হবে সেটিই যা আপনার বক্সে ollama list কমান্ডটি দেখায়:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"ollama": {
"npm": "@ai-sdk/openai-compatible",
"name": "Ollama (local)",
"options": { "baseURL": "http://127.0.0.1:11434/v1" },
"models": { "your-model-name": { "name": "Local coding model" } }
}
}
}প্রথম দিন থেকেই একটি বিল্ট-ইন অভ্যাস গড়ে তোলা ভালো। OpenCode দুটি এজেন্ট নিয়ে আসে যার মধ্যে আপনি Tab কি ব্যবহার করে অদলবদল করতে পারেন: Build, যা পূর্ণ অ্যাক্সেসসহ ডিফল্ট এজেন্ট, এবং Plan, যা পরিবর্তন করার ক্ষমতা নিষ্ক্রিয় রাখে। Plan মোডে একটি নতুন কাজ শুরু করুন, এজেন্টকে কোডটি পড়তে দিন এবং একটি কর্মপরিকল্পনা প্রস্তাব করতে দিন। পরিকল্পনাটি আপনার পছন্দ হলে তবেই Build মোডে যান। সার্ভারে, প্রথম ধাপে রিড-অনলি মোড ব্যবহার করা একটি সাশ্রয়ী নিরাপত্তা ব্যবস্থা। Claude Code একই সিদ্ধান্তকে এজেন্ট না বলে পারমিশন মোড হিসেবে অভিহিত করে, এবং ডিফল্ট হিসেবে অটো মোডে এর রূপান্তর সম্পর্কে পড়া জরুরি যদি আপনি উভয় টুলই ব্যবহার করেন, কারণ একটি সেশন কোন মোডে শুরু হচ্ছে তার ওপর নির্ভর করে যে একটি আনমোনিত এজেন্ট কতটা পরিবর্তন করতে পারবে।
প্রভাবের পরিধি বা ব্লাস্ট রেডিয়াস
একটি কোডিং এজেন্ট নিষ্ক্রিয় নয়, তাই এই সেটআপটি কী করতে পারে এবং কী করতে পারে না তা স্পষ্টভাবে বুঝে নিন। এতে ফাইল ক্ষতিগ্রস্ত হওয়ার ঝুঁকি থাকে: opencode ব্যবহারকারী শুধুমাত্র তার নিজের হোম ডিরেক্টরির মালিক, তাই কোনো এডিট বা ডিলিট অপারেশন সেই সীমানার বাইরে যেতে পারে না। এতে ক্রেডেনশিয়াল উন্মুক্ত হওয়ার ঝুঁকি থাকে: কি (key) ফাইলটি একটি নির্দিষ্ট অ্যাকাউন্টে mode 600 পারমিশনসহ থাকে। এই অ্যাকাউন্টটি বৈধভাবে কী কী করতে পারে তা এখানে সীমাবদ্ধ নয়, তাই প্রজেক্ট ডিরেক্টরিতে যদি প্রোডাকশন ডেপ্লয়মেন্টের ক্রেডেনশিয়াল থাকে, তবে এজেন্ট সেগুলো ব্যবহার করতে পারবে; তাই এই ধরনের ফাইল এজেন্টের অ্যাকাউন্ট থেকে সম্পূর্ণ দূরে রাখুন।
OpenClaw-এর মতো গেটওয়ে এজেন্টের বিপরীতে, OpenCode একটি ইন্টারঅ্যাক্টিভ টার্মিনাল প্রোগ্রাম, কোনো ডেমোন (daemon) নয়। এটি কোনো লিসেনিং পোর্ট খোলে না এবং এর কোনো দীর্ঘমেয়াদী সার্ভিস নেই, তাই এর জন্য কোনো systemd ইউনিট লেখার বা ফায়ারওয়াল পোর্ট খোলার প্রয়োজন নেই। এর নিরাপত্তা ব্যবস্থা মূলত ইউজার অ্যাকাউন্ট এবং প্রজেক্ট ডিরেক্টরির ওপর নির্ভরশীল, আর এই কারণেই এই গাইডের প্রথম অংশটি সবচেয়ে গুরুত্বপূর্ণ।
এর চারপাশের নিরাপত্তা নিশ্চিত করতে সাধারণ সতর্কতা অবলম্বন করা প্রয়োজন, কারণ একটি কোডিং VPS শেষ পর্যন্ত একটি পাবলিক সার্ভার: SSH hardening on a VPS-এ বর্ণিত নিয়ম অনুযায়ী রুট লগইন বন্ধ রেখে শুধুমাত্র কি-ভিত্তিক SSH ব্যবহার করুন, একটি ডিফল্ট-ডিনাই ফায়ারওয়াল রাখুন এবং নিয়মিত আপডেট করুন। এছাড়া এজেন্ট যা তৈরি করছে তা পর্যালোচনা করুন। পুশ করার আগে এর ডিফস (diffs) পড়ুন, ঠিক যেভাবে আপনি একজন নতুন কন্ট্রিবিউটরের পুল রিকোয়েস্ট পড়েন, কারণ আপনিই সেই ব্যক্তি যিনি ফলাফলটি ডেপ্লয় করবেন।
পরিশেষে, টুলটিকে সবসময় আপ-টু-ডেট রাখুন। OpenCode নিয়মিত নতুন ভার্সন রিলিজ করে এবং এই আপডেটগুলোতে এমন সব ফিক্স থাকে যা আপনার সার্ভারে কমান্ড চালানো প্রোগ্রামের জন্য অত্যন্ত জরুরি। আপডেট করার প্রক্রিয়াটি আপনার ইন্সটলেশনের মতোই: opencode ব্যবহারকারী হিসেবে ইন্সটল স্ক্রিপ্টটি পুনরায় চালান, অথবা যদি npm দিয়ে ইন্সটল করে থাকেন তবে sudo npm update -g opencode-ai কমান্ডটি ব্যবহার করুন, এরপর opencode --version দিয়ে নতুন ভার্সনটি নিশ্চিত করুন। কয়েক মাস পুরনো বিল্ডের বাগ ডিবাগ করার চেয়ে মাঝেমধ্যে এক মিনিটের রক্ষণাবেক্ষণ অনেক বেশি সাশ্রয়ী।
FAQ
OpenCode কি পেইড API-এর পরিবর্তে লোকাল মডেল ব্যবহার করতে পারে?
হ্যাঁ। OpenCode যেকোনো OpenAI-compatible সার্ভারকে প্রোভাইডার হিসেবে গ্রহণ করে, তাই একই VPS-এ Ollama দ্বারা চালিত মডেলও কাজ করবে: opencode.json-এ লোকাল baseURL এবং Ollama যে মডেলের নাম দেখায় তা উল্লেখ করুন। এখানে হার্ডওয়্যার একটি গুরুত্বপূর্ণ বিষয়, কারণ কোডিংয়ের জন্য কার্যকর মডেল চালাতে প্রচুর মেমোরি প্রয়োজন। তাই মডেল ডাউনলোড করার আগেই সার্ভারের কনফিগারেশন সেই অনুযায়ী নির্ধারণ করুন।
ল্যাপটপ বন্ধ করার পরেও আমি কীভাবে OpenCode চালু রাখতে পারি?
VPS-এ tmux ব্যবহার করে এটি চালান। tmux new -s opencode দিয়ে একটি named session-এ এজেন্ট শুরু করুন, এরপর Ctrl-b এবং d চেপে ডিটাচ করুন। আপনার SSH সংযোগ বিচ্ছিন্ন হওয়ার পরেও সার্ভারে সেশনটি চালু থাকবে। যেকোনো সময় tmux attach -t opencode দিয়ে পুনরায় যুক্ত হলে কথোপকথন এবং চলমান টাস্কগুলো আগের মতোই পাবেন। সার্ভার রিবুট করলে সেশনটি বন্ধ হয়ে যায়, তাই রিবুটের পর নতুন সেশন শুরু করতে হবে।
আমার VPS-এ OpenCode-কে কমান্ড চালাতে দেওয়া কি নিরাপদ?
আপনি যদি এটিকে সীমাবদ্ধ রাখতে পারেন তবে এটি নিরাপদ। OpenCode-এর জন্য sudo সুবিধা নেই এমন একটি আলাদা unprivileged user তৈরি করুন, এর প্রজেক্টগুলো git-এ রাখুন যাতে প্রতিটি পরিবর্তন রিভার্স করা যায়, API key-কে 600 মোডের ফাইলে সংরক্ষণ করুন এবং Build এজেন্টকে কোনো পরিবর্তনের অনুমতি দেওয়ার আগে Plan এজেন্ট দিয়ে রিড-অনলি মোডে যাচাই করে নিন। এতে এজেন্ট শুধুমাত্র তার নিজস্ব অ্যাকাউন্টের আওতাধীন ফাইলগুলোই পরিবর্তন করতে পারবে এবং সার্ভারের বাকি অংশ সুরক্ষিত থাকবে।
OpenCode এবং Claude Code-এর মধ্যে পার্থক্য কী?
OpenCode হলো ওপেন সোর্স (MIT) এবং এটি প্রোভাইডার নিরপেক্ষ, যা একটি ইন্টারফেসের মাধ্যমে লোকাল মডেলসহ 75টিরও বেশি মডেল প্রোভাইডারের সাথে সংযোগ স্থাপন করতে পারে। Claude Code হলো Anthropic-এর নিজস্ব টার্মিনাল এজেন্ট, যা শুধুমাত্র Anthropic-এর মডেলগুলোর জন্য তৈরি। আপনি যদি অনেকগুলো প্রোভাইডারের জন্য একটি টুল ব্যবহার করতে চান অথবা লোকাল মডেলসহ সম্পূর্ণ self-hosted স্ট্যাক চান, তবে OpenCode আপনার জন্য উপযুক্ত। উভয়ই VPS-এ tmux-এর ভেতরে একই unprivileged-user সেটআপে ভালোভাবে কাজ করে।