پرش به محتوای اصلی
پرش به محتوای مقاله

آیا می‌توان رندرینگ کامل کرومیوم را به محیط خط فرمان آورد؟

·۱ مرداد ۱۴۰۵۱۳ دقیقه مطالعه
راهنما
نمودار تعاملی مرورگر وب با رابط کاربری مدرن و دکمه‌های کنترل نوار ابزار.
نمودار تعاملی مرورگر وب با رابط کاربری مدرن و دکمه‌های کنترل نوار ابزار.
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

انتقال کامل موتور رندرینگ کرومیوم به محیط ترمینال با پشتیبانی از Sixel و Kitty؛ برخلاف مرورگرهای متنی قدیمی، در اینجا وب‌سایت‌ها با تمام گرافیک و جاوااسکریپت رندر می‌شوند.

تصور کنید تمام قدرت یک مرورگر مدرن بر پایه کرومیوم را در قلب محیط متنی ترمینال داشته باشید. اگر یک توسعه‌دهنده یا مدیر سیستم هستید که ساعت‌ها از محیط خط فرمان جدا نمی‌شود، دیگر لازم نیست برای چک کردن یک مستند فنی یا تست یک API، جریان کاری خود را با باز کردن یک پنجره گرافیکی قطع کنید. این ابزار، فاصله بین بهره‌وری گردش کار مبتنی بر کیبورد و ضرورت‌های وب مدرن که به شدت به اسکریپت‌ها وابسته است را از بین می‌برد.

به نقل از مستندات پروژه در tangled.org (که تنها منبع رسمی پس از مهاجرت از Codeberg است)، مرورگر Brow6el در ۲۳ جولای ۲۰۲۶ منتشر شد. توسعه‌دهنده این پروژه دلیل انتقال از Codeberg را این گفته است که پروژه‌های دیگر در آنجا دیگر مورد استقبال نبودند و او ترجیح داد از یک پلتفرم واحد استفاده کند. Brow6el در واقع یک اثبات مفهوم (POC) است که با بهره‌گیری از چارچوب جاسازی‌شده کرومیوم (CEF) — که شبیه به موتور یک ماشین قدرتمند است که در بدنه یک ماشین دیگر نصب شده تا همان قدرت را بدهد — محدودیت‌های قدیمی مرورگرهای متنی را می‌شکند.

برای چندین دهه، وب‌گردی در ترمینال به معنای انتخاب بین سادگی بیش از حد Lynx یا کلنجار رفتن با لایوت‌های به‌هم‌ریخته در w3m بود. صفحات وب مدرن که بر پایه جاوااسکریپت‌های سنگین و CSS3 هستند، در آن محیط‌ها اصلاً کار نمی‌کنند. Brow6el این وضعیت را تغییر می‌دهد؛ این مرورگر صفحات را به‌صورت آف-اسکرین (خارج از صفحه) توسط CEF رندر کرده و سپس آن فریم‌ها را به پروتکل‌های گرافیکی Sixel یا Kitty تبدیل می‌کند. این کار به ترمینال اجازه می‌دهد به جای نمایش تقریب‌های متنی (ASCII)، پیکسل‌های واقعی را نمایش دهد.

همان‌طور که در تحلیل‌های پیشین ما درباره ابزارهای بهره‌وری محیط CLI اشاره کردیم، حذف جابه‌جایی بین محیط‌های مختلف، کلید افزایش تمرکز است. Brow6el این کار را از طریق دو مسیر گرافیکی اصلی انجام می‌دهد:

  • پروتکل Sixel: گزینه پیش‌فرض و توصیه شده برای اکثر کاربران است. این پروتکل از رندرینگ یکپارچه (Monolithic) و تکه‌ای (Tiled) برای کاهش لرزش تصویر پشتیبانی می‌کند. در محیط‌هایی که تایپ زیاد است، Sixel معمولاً سریع‌تر عمل می‌کند و توسط ترمینال‌هایی مانند mlterm، xterm، foot و wezterm پشتیبانی می‌شود.
  • پروتکل Kitty: جایگزینی برای ترمینال‌های سازگار با Kitty (از جمله ghostty و wezterm) است که از کدگذاری base64 برای نمایش انیمیشن‌های با کیفیت بالا با نرخ ۳۰ فریم بر ثانیه استفاده می‌کند. این پروتکل از سیستم دو-بافره (Double Buffering) یا همان تعویض شناسه‌های تصویر استفاده می‌کند تا از لرزش جلوگیری کند. همچنین تصاویر را در لایه z=-1 (پشت لایه متن) قرار می‌دهد تا دیالوگ‌های ترمینال روی تصاویر نمایش داده شوند.

نمودار تعاملی مرورگر وب با رابط کاربری مدرن و دکمه‌های کنترلی در بالای صفحه

در جزئیات پیاده‌سازی گرافیکی، قابلیت رندرینگ تکه‌ای Sixel یکی از ویژگی‌های کلیدی است. این قابلیت با استفاده از کاشی‌های با اندازه پویا (تقریباً ۳۰ تا ۴۰ کاشی در هر صفحه) بر اساس رزولوشن ترمینال، لرزش تصویر را کاهش می‌دهد. مرورگر از «مستطیل‌های کثیف» (Dirty Rectangles) در CEF استفاده می‌کند تا نواحی تغییر یافته را شناسایی کند؛ تنها کاشی‌هایی که با این نواحی تلاقی دارند دوباره رسم می‌شوند. این کاشی‌ها دقیقاً با مرزهای سلول‌های ترمینال تراز شده‌اند تا هیچ اثر بصری نامطلوبی (Artifact) ایجاد نشود.

در مقابل، رندرینگ یکپارچه Kitty تمام صفحه را به صورت RGBA کدگذاری کرده و از طریق base64 ارسال می‌کند. این متد برای بهینه‌سازی عملکرد تایپ، بدون فشرده‌سازی ارسال می‌شود. کاربران می‌توانند در حالت استاندارد با فشردن کلید z بین رندر تکه‌ای و یکپارچه (فقط برای Sixel) جابه‌جا شوند. همچنین با فشردن کلید Z می‌توان بازترسیم کامل را اجبار کرد (در Sixel حالت یکپارچه و در Kitty رفرش کامل). نوار وضعیت مرورگر وضعیت فعلی را نمایش می‌دهد: [S][T] برای Sixel تکه‌ای، [S][M] برای Sixel یکپارچه و [S] برای Kitty.

برای کنترل این محیط بصری بدون استفاده از موس، Brow6el یک سیستم ناوبری مودال (Modal Navigation) — شبیه به کلیدهای میانبر در نرم‌افزار Vim — را پیاده کرده است. شما می‌توانید بین سه مود اصلی برای تعامل با وب جابه‌جا شوید:

۱. حالت استاندارد [S]: لایه پیش‌فرض برای ناوبری است که در آن از کلیدهای h/j/k/l یا کلیدهای جهت‌نما برای حرکت استفاده می‌شود. اکشن‌های کلیدی در این مود عبارتند از:
* r: ریلود (بارگذاری مجدد) صفحه
* u: رفتن به یک URL خاص
* U: کپی URL فعلی در کلیپ‌بورد (Shift+U)
* d: افزودن بوک‌مارک
* b: باز کردن لیست بوک‌مارک‌ها
* m: باز کردن مدیریت دانلودها
* x: خروج از مرورگر
* f: فعال‌سازی مود Hint (ناوبری لینک‌ها با کیبورد)
* c: باز و بسته کردن کنسول جاوااسکریپت
* s: منوی اسکریپت‌های کاربر
* y: فعال/غیرفعال کردن تزریق خودکار اسکریپت‌ها
* z: سوئیچ بین رندر تکه‌ای و یکپارچه (فقط Sixel)
* Z: اجبار به بازترسیم کامل
* بزرگنمایی: کلیدهای + یا = برای زوم به جلو، - یا _ برای زوم به عقب و 0 برای بازگشت به حالت ۱.۰x.

۲. حالت درج [I]: با فشردن کلید i فعال می‌شود و تمام ورودی‌های کیبورد را مستقیماً به صفحه وب ارسال می‌کند. این حالت برای تایپ در فرم‌ها، نواحی متنی (Text areas) و نوار جستجو حیاتی است. برای بازگشت به حالت استاندارد باید کلید ESC زده شود.

۳. حالت بصری [V]: لایه‌ای برای انتخاب متون و کپی کردن محتوا است. مکان‌نما از اولین متن قابل رویت یا موقعیت قبلی موس شروع می‌شود.
* جابه‌جایی: کلیدهای h/l برای حرکت تک-کاراکتری، w/b برای حرکت کلمه به کلمه و j/k برای حرکت خط به خط.
* انتخاب: با فشردن کلید v انتخاب شروع می‌شود و با h/l/w/b/j/k محدوده انتخاب گسترش می‌یابد.
* تکمیل: کلید y برای کپی در کلیپ‌بورد و خروج از مود، و کلید ESC برای لغو عملیات.

نمودار تعاملی رابطه بین متغیرها در پروژه Janantos، با قابلیت مرور و جستجوی داده‌ها.

یکی از خیره‌کننده‌ترین قابلیت‌ها، حالت شبیه‌سازی موس [M] است. در این وضعیت، به جای نیاز به موس فیزیکی، کاربر یک نشانگر زرد رنگ را با کیبورد (h/j/k/l یا جهت‌نماها) جابه‌جا می‌کند. کلید q سرعت دقت (Precision) و کلید f سرعت سریع (Fast) را تغییر می‌دهد. کاربران می‌توانند با فشردن SPACE یا ENTER کلیک کنند؛ یا در صورت فعال بودن قابلیت Drag-and-Drop (با کلید r)، آیتمی را رها کنند. برای بازگشت به حالت استاندارد از کلید e یا ESC استفاده می‌شود.

برای حل مشکل دقت در مکان‌یابی، مرورگر یک حالت پرش شبکه‌ای (Grid Jump Mode) دارد. با فشردن کلید g در حالت موس، یک شبکه تطبیقی ۳در۳ با سلول‌های نام‌گذاری شده (به طور پیش‌فرض qweasdzxc) ظاهر می‌شود. با انتخاب یک سلول، مرورگر به صورت بازگشتی روی آن ناحیه زوم می‌کند تا کاربر در ۳ یا ۴ حرکت به دقیق‌ترین المان برسد.

  • نشانه های بصری: شبکه‌های سبز رنگ نشان‌دهنده امکان زوم بیشتر و شبکه‌های قرمز نشان‌دهنده رسیدن به حداکثر زوم هستند.
  • حرکت: در حداکثر زوم، شبکه به حرکت مکان‌نمای با دقت بالا تغییر می‌کند.
  • ناوبری: کلید Backspace برای زوم به عقب (Zoom out) و ESC برای خروج از حالت شبکه است.
  • شخصی‌سازی: کلیدهای شبکه را می‌توان در فایل ~/.brow6el/browser.conf از طریق تنظیم grid_keys تغییر داد.

برای توسعه‌گران، یک بازرس عناصر (Element Inspector) با فشردن کلید i در حالت موس فعال می‌شود. این ابزار یک حاشیه فیروزه‌ای دور المان‌ها می‌کشد و یک پنل اطلاعاتی در لحظه نمایش می‌دهد که شامل موارد زیر است:

  • نام تگ، ID و کلاس‌های CSS.
  • ویژگی‌های کلیدی مانند href، src، type و name.
  • ابعاد و موقعیت دقیق.
  • پیش‌نمایش محتوای متنی.

نمودار تعاملی رابطه بین متغیرها در پروژه Janantos، با قابلیت بزرگنمایی و جابجایی.

Brow6el انتقال بین مودها را بر اساس متن (Context) خودکار می‌کند:

  • کلیک روی یک فیلد ورودی در حالت موس $\rightarrow$ انتقال خودکار به مود INSERT.
  • کلیک روی یک جعبه انتخاب (Select box) در حالت موس $\rightarrow$ انتقال خودکار به مود STANDARD.
  • ناوبری به یک صفحه جدید $\rightarrow$ بازگشت خودکار به مود STANDARD.

برای کسانی که کلاً از موس دوری می‌کنند، مود Hint (فعال با کلید f) برچسب‌های زرد رنگی روی تمام لینک‌ها قرار می‌دهد. با تایپ برچسب خاص (مثلاً "ab") و فشردن Enter، کاربر بلافاصله به آن لینک منتقل می‌شود. این مسیر، ناوبری کامل با کیبورد را بدون نیاز به ورود به حالت موس ممکن می‌سازد.

از نظر حریم خصوصی و شخصی‌سازی فنی، Brow6el کنترل گسترده‌ای را از طریق فایل ~/.brow6el/browser.conf ارائه می‌دهد. کاربران می‌توانند بین مودهای مختلف پروفایل انتخاب کنند:

  • مود موقت (پیش‌فرض): هر جلسه از یک پروفایل جدید استفاده می‌کند. تمام کوکی‌ها، کش و تاریخچه هنگام خروج پاک می‌شوند. هر نمونه از یک دایرکتوری کش مجزا در /tmp/brow6el_<PID> استفاده می‌کند.
  • مود پایدار (Persistent): پروفایل را در ~/.brow6el/profile ذخیره می‌کند تا جلسات ورود (Login) و کش برای افزایش سرعت حفظ شوند.
  • مود سفارشی: اجازه می‌دهد کاربر مسیر یک پروفایل خاص را از طریق profile_path تعیین کند.

گزینه‌های دقیق پیکربندی در browser.conf شامل cache_size_mb=500 (حجم کش)، clear_cache_on_exit (پاک‌سازی کش در خروج) و clear_cookies_on_exit (پاک‌سازی کوکی‌ها در خروج) است. همچنین می‌توان یک default_url برای صفحه اصلی تعریف کرد.

امنیت از طریق سیستم یکپارچه DNS-over-HTTPS (DoH) مدیریت می‌شود. کاربران می‌توانند doh_enabled=true را تنظیم کرده و یکی از ارائه‌دهندگان زیر را انتخاب کنند:

  • Cloudflare: https://cloudflare-dns.com/dns-query
  • Google: https://dns.google/dns-query
  • Quad9: https://dns.quad9.net/dns-query (تمرکز بر امنیت و مسدود کردن دامنه‌های مخرب)

حالت doh_mode می‌تواند روی secure (اجباری، بدون بازگشت به DNS سیستم - توصیه شده برای Ad-blocking) یا automatic (با قابلیت بازگشت به DNS سیستم در صورت شکست) تنظیم شود. نکته این است که در حالت secure، سرور DoH باید بتواند google.com را برای چک کردن اتصال CEF تحلیل کند.

مرورگر همچنین شامل یک سیستم پروکسی است که از پروتکل‌های HTTP، HTTPS و SOCKS4/5 پشتیبانی می‌کند. پیکربندی شامل proxy_server، proxy_username و proxy_password است. یک لیست استثنا به نام proxy_bypass_list (مثلاً localhost,127.0.0.1,*.local) تضمین می‌کند که ترافیک محلی از پروکسی عبور نکند.

  • پروکسی‌های HTTP/HTTPS: پشتیبانی کامل از احراز هویت با نام کاربری و رمز عبور.
  • پروکسی‌های SOCKS: به دلیل نحوه پیاده‌سازی در کرومیوم، از احراز هویت پشتیبانی نمی‌کنند.

مدیریت زوم از طریق کلیدهای + (بزرگنمایی)، - (کوچکنمایی) و 0 (بازگشت به ۱.۰x) انجام می‌شود. سه رفتار اصلی برای زوم وجود دارد:

  • مود Auto: زوم را با یک فرمول وزنی محاسبه می‌کند: (cell_zoom * 0.6) + (resolution_zoom * 0.4). در این فرمول، زوم سلول بر اساس ارتفاع و عرض سلول و زوم رزولوشن بر اساس ارتفاع و عرض پنجره محاسبه می‌شود تا با نمایشگرهای High-DPI و تغییر اندازه پنجره سازگار شود (دامنه ۰.۵x تا ۳.۰x).
  • مود Fixed: از تنظیم ثابت zoom_level (مثلاً ۲.۵) در فایل تنظیمات استفاده می‌کند. مقدار zoom_step (پیش‌فرض ۰.۲۵) گام‌های تغییر با کلید میانبر را تعیین می‌کند.
  • مود None: از ۱.۰x شروع کرده و فقط اجازه تغییرات دستی را می‌دهد.

کاربران همچنین می‌توانند فایل ~/.brow6el/zoom.conf را برای تنظیمات اختصاصی هر سایت ایجاد کنند؛ مثلاً github.com=2.5 یا wikipedia.org=2.75 که برای زیردامنه‌ها نیز کار می‌کند.

فراتر از وب‌گردی پایه، این پلتفرم از سیستم تزریق جاوااسکریپت شبیه به Greasemonkey پشتیبانی می‌کند. کاربران می‌توانند فایل‌های .js را در ~/.brow6el/userscripts قرار داده و الگوهای URL را در ~/.brow6el/userscripts.conf با فرمت script.js|Name|AutoInjectBool|URLPattern تعریف کنند.

تزریق دستی اسکریپت‌ها از طریق منوی s یا فعال‌سازی تزریق خودکار با کلید y امکان‌پذیر است. مرورگر با چندین اسکریپت پیش‌فرض در دایرکتوری scripts/ عرضه می‌شود:

  • Adblock.js: ارائه قابلیت‌های پایه مسدودسازی تبلیغات.
  • Reader-mode.js: ساده‌سازی صفحات برای نمایش محتوای مقاله (مشابه Reader View در فایرفکس).
  • View-source.js: نمایش سورس HTML با هایلایت سینتکس، فرمت‌بندی و شماره خطوط (با قابلیت ناوبری کیبورد).
  • Force-light-mode.js: بازنویسی تم‌های تاریک برای تحمیل طرح رنگی روشن.
  • Frameset-redirect.js: هدایت صفحات قدیمی frameset به محتوای واقعی.

فرآیند ساخت، سازگاری و استقرار

برای نصب Brow6el، کاربران ابتدا باید یک باینری CEF با حجم حدود ۶۷۰ مگابایت را با اجرای دستور ./download_cef.sh دانلود کرده و سپس ./build.sh را اجرا کنند.

وابستگی‌های ساخت (Dependencies) عبارتند از:

  • در Ubuntu/Debian: بسته‌های build-essential, cmake, git, pkg-config, curl, libsixel-dev, libx11-dev, libxcomposite-dev, libxdamage-dev, libxext-dev, libxfixes-dev, libxrandr-dev, libgbm-dev, libxcb1-dev, libpango1.0-dev, libatk1.0-dev, libcups2-dev, libasound2-dev, libnss3-dev, libnspr4-dev و libglib2.0-dev.
  • در Arch Linux: بسته‌های base-devel, cmake, git, pkg-config, curl, libsixel, libx11, libxcomposite, libxdamage, libxfixes, libxrandr, mesa, pango, atk, cups, alsa-lib, nss, nspr و glib2.

این پروژه در حال حاضر روی اوبونتو ۲۵.۱۰، دبیان ۱۳ و آرچ لینوکس تست شده و به طور رسمی از طریق مسیرهای زیر توزیع می‌شود:

  • Arch User Repository (AUR): با نام brow6el-git
  • Artix Linux: مخزن Omniverse
  • Debian: مخزن غیررسمی Vejeta (شامل آخرین نسخه‌های libcef)

اگرچه این ابزار با ترمینال‌های foot، wezterm و Ghostty کار می‌کند، اما نویسنده هشدار داده است که نسخه Kitty در اوبونتو ۲۴.۰۴ (نسخه ۰.۳۲.۲) بسیار قدیمی است و نمی‌تواند پروتکل تصویر فعلی را هندل کند، که منجر به چاپ متن base64 به جای تصاویر می‌شود. علاوه بر این، اجرای Brow6el روی یک میزبان راه دور از طریق SSH به دلیل حجم عظیم داده‌های مورد نیاز برای هر فریم رندر شده، پاسخ‌دهی را به شدت کاهش می‌دهد.

نکات فنی تکمیلی:

  • کنسول جاوااسکریپت: با کلید c در حالت استاندارد باز می‌شود. تمام پیام‌های console.log/warn/error را ثبت می‌کند. کاربران می‌توانند کدهای JS را تایپ کرده و با Enter اجرا کنند و خروجی را با کلیدهای جهت‌نما مرور نمایند.
  • پیکربندی CEF: فلگ‌های کرومیوم در ~/.brow6el/cef_flags.conf مدیریت می‌شوند که اجازه می‌دهد کاربر WebGL را فعال/غیرفعال کند، سطح لاگ‌ها را تغییر دهد یا User-Agent سفارشی تنظیم کند. در این زمینه، بهینه‌سازی‌های لایه‌ی رندر گرافیکی اهمیت زیادی دارد، مشابه آنچه در تجربه کاهش زمان رندر WebGL با استفاده از llvmpipe مشاهده شد.
  • اجراهای چندگانه: چندین نسخه از مرورگر می‌توانند به طور همزمان در ترمینال‌های مختلف اجرا شوند و هر کدام دایرکتوری کش مجزایی را در /tmp/brow6el_<PID> داشته باشند.

تحلیل تحریریه

Brow6el نشان‌دهنده تغییری در نحوه تفکر ما درباره «تجربه کاربری ترمینال» است. با آوردن کل استک کرومیوم به محیط CLI، شکاف بین بهره‌وری گردش کار مبتنی بر کیبورد و ضرورت‌های وب مدرن و سنگین را پر می‌کند. برای توسعه‌دهندگان و مدیران سیستمی که در ترمینال زندگی می‌کنند، این ابزار جابه‌جاییe آزاردهنده به مرورگر گرافیکی برای چک کردن سریع مستندات یا تست API را حذف می‌کند.

با این حال، تکیه اولیه بر پروتکل‌های Sixel و Kitty باعث شده این ابزار فعلاً بیشتر برای علاقه‌مندان (Enthusiasts) باشد. افت عملکرد در SSH نشان می‌دهد که اگرچه رندرینگ چشمگیر است، اما نیازهای پهنای باند برای وب‌گردی «پیکسل-به-پیکسل» در ترمینال همچنان یک گلوگاه است. ارزش واقعی این پروژه در ناوبری مودال آن نهفته است؛ تبدیل وب به یک تجربه شبیه Vim، برای کسانی که بر این کلیدها مسلط شده‌اند، یک جهش بزرگ در بهره‌وری است.

چرا این موضوع مهم است؟

این ابزار با تکیه بر تخصص در پروتکل‌های گرافیکی ترمینال، نیاز به سوئیچینگ مداوم بین GUI و CLI را حذف می‌کند. این تغییر برای توسعه‌گران سطح بالا که بر جریان کاری متمرکز هستند، یک مزیت عملیاتی محسوب می‌شود.

تأثیر برای ایران

این ابزار به‌دلیل متن‌باز بودن و توزیع در مخازنی مثل AUR، برای توسعه‌گران ایرانی کاملاً در دسترس است و هیچ محدودیتی در نصب و اجرا ندارد.

·نگاه ما
تحریریه دات‌هوش

Brow6el تلاش می‌کند شکاف میان بهره‌وری شدید محیط CLI و ضرورت‌های وب مدرن را بپرد. ارزش واقعی این پروژه نه در رندرینگ، بلکه در «تغییر پارادایم تعامل» است؛ تبدیل وب به یک تجربه Vim-like برای کاربرانی که هرگز نمی‌خواهند دستشان را از روی کیبورد بردارند. با این حال، وابستگی شدید به پروتکل‌های خاص ترمینال، آن را فعلاً در دسته ابزارهای «عشق‌بازان» (Enthusiast tools) نگه می‌دارد.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.