LUIT(1) General Commands Manual LUIT(1)

luit - فیلتر تبدیل کدگذاری کاراکترها بین برنامه‌ها و شبیه‌سازهای ترمینال UTF-8

luit [ گزینه‌ها ] [ -- ] [ برنامه [ آرگومان‌ها ] ]

Luit یک فیلتر است که می‌تواند میان یک برنامه دلخواه و یک شبیه‌ساز ترمینال UTF-8 اجرا شود. این ابزار خروجی برنامه را از کدگذاری محلی (locale) به UTF-8 تبدیل می‌کند و ورودی ترمینال را از UTF-8 به کدگذاری محلی تغییر می‌دهد.

Luit ورودی خود را از فرآیند فرزند (یعنی برنامه‌ای که در ترمینال در حال اجراست) می‌خواند. Luit خروجی خود را در ترمینال می‌نویسد. این دو (ورودی و خروجی) می‌توانند کدگذاری‌های متفاوتی داشته باشند.

یک برنامه همچنین می‌تواند با استفاده از توالی‌های گریز استاندارد ISO 2022 و ISO 6429، تغییر به یک کدگذاری خروجی دیگر را درخواست کند. استفاده از این ویژگی توصیه نمی‌شود: برنامه‌های چندزبانه باید اصلاح شوند تا مستقیماً خروجی UTF-8 تولید کنند.

Luit معمولاً به‌صورت خودکار و شفاف توسط شبیه‌ساز ترمینال فراخوانی می‌شود. برای اطلاعات درباره اجرای luit از خط فرمان، بخش «مثال‌ها» را در ادامه ببینید.

چاپ نسخه luit و خروج.
فایل نام‌های مستعار لوکال
(پیش‌فرض: /usr/share/X11/locale/locale.alias).
تنظیم نام فرزند (همان‌طور که در argv[0] ارسال می‌شود).
عمل کردن به‌عنوان یک مبدل ساده از ورودی استاندارد به خروجی استاندارد.
تنظیم luit برای استفاده از encoding به‌جای کدگذاری لوکال جاری.
تنظیم مجموعه نویسه خروجی انتخاب‌شده اولیه در G0. مقدار پیش‌فرض به لوکال بستگی دارد، اما معمولاً ASCII است.
تنظیم مجموعه نویسه خروجی انتخاب‌شده اولیه در G1. مقدار پیش‌فرض به لوکال بستگی دارد.
تنظیم مجموعه نویسه خروجی انتخاب‌شده اولیه در G2. مقدار پیش‌فرض به لوکال بستگی دارد.
تنظیم مجموعه نویسه خروجی انتخاب‌شده اولیه در G3. مقدار پیش‌فرض به لوکال بستگی دارد.
تنظیم انتساب اولیه GL در خروجی. آرگومان باید یکی از g0، g1، g2 یا g3 باشد. مقدار پیش‌فرض به لوکال بستگی دارد، اما معمولاً g0 است.
تنظیم انتساب اولیه GR در خروجی. مقدار پیش‌فرض به لوکال بستگی دارد و معمولاً g2 است به‌جز برای لوکال‌های EUC که در آن‌ها g1 است.
نمایش پیام نحوه استفاده و گزینه‌ها در خروجی استاندارد و خروج.
ثبت تمام بایت‌های دریافت شده از فرزند در filename.
تولید نویسه‌های ۷-بیتی برای ورودی صفحه‌کلید.
تنظیم مجموعه نویسه ورودی انتخاب‌شده اولیه در G0. مقدار پیش‌فرض به لوکال بستگی دارد، اما معمولاً ASCII است.
تنظیم مجموعه نویسه ورودی انتخاب‌شده اولیه در G1. مقدار پیش‌فرض به لوکال بستگی دارد.
تنظیم مجموعه نویسه ورودی انتخاب‌شده اولیه در G2. مقدار پیش‌فرض به لوکال بستگی دارد.
تنظیم مجموعه نویسه ورودی انتخاب‌شده اولیه در G3. مقدار پیش‌فرض به لوکال بستگی دارد.
تنظیم انتساب اولیه GL در ورودی. آرگومان باید یکی از g0، g1، g2 یا g3 باشد. مقدار پیش‌فرض به لوکال بستگی دارد، اما معمولاً g0 است.
تنظیم انتساب اولیه GR در ورودی. مقدار پیش‌فرض به لوکال بستگی دارد و معمولاً g2 است به‌جز برای لوکال‌های EUC که در آن‌ها g1 است.
تولید شیفت‌های قفل‌کننده (SO/SI) برای ورودی صفحه‌کلید.
+kss
غیرفعال کردن تولید شیفت‌های تکی برای ورودی صفحه‌کلید.
+kssgr
استفاده از کدهای GL پس از یک شیفت تکی برای ورودی صفحه‌کلید. به‌طور پیش‌فرض، هنگام تولید ورودی صفحه‌کلید هشت‌بیتی، کدهای GR پس از یک شیفت تکی تولید می‌شوند.
فهرست کردن مجموعه نویسه‌ها و کدگذاری‌های پشتیبانی‌شده و سپس خروج. Luit برای این کار از جدول‌های داخلی خود استفاده می‌کند که بر پایه کتابخانه fontenc هستند.
-list-builtin
فهرست کردن کدگذاری‌های توکار (built-in) که به‌عنوان جایگزین پشتیبان در صورت نبود داده‌ها از iconv یا fontenc استفاده می‌شوند.
این گزینه وابسته به پیکربندی luit برای استفاده از iconv است، زیرا کتابخانه fontenc فهرستی از کدگذاری‌های توکار ارائه نمی‌دهد.
-list-fontenc
فهرست کردن کدگذاری‌های ارائه‌شده توسط فایل‌های “.enc” که در اصل همراه با کتابخانه fontenc توزیع شده‌اند.
-list-iconv
فهرست کردن کدگذاری‌ها و لوکال‌های پشتیبانی‌شده توسط کتابخانه iconv. Luit جدول‌های داخلی نام‌های fontenc خود را با کدگذاری‌های iconv تطبیق می‌دهد.
برای ساده‌تر شدن اسکریپت‌نویسی، luit فاصله‌ها، خط‌های زیرین (underscore) و خط‌های تیره اسکی (dash) گنجانده‌شده در نام‌ها را نادیده می‌گیرد. Luit همچنین بزرگی و کوچکی حروف را هنگام تطبیق نام‌های مجموعه نویسه و کدگذاری نادیده می‌گیرد.
این گزینه فقط کدگذاری‌هایی را فهرست می‌کند که با لوکال‌های پشتیبانی‌شده در سیستم‌عامل فعلی مرتبط هستند. برنامه پرتابل iconv فهرستی از کدگذاری‌های پشتیبانی‌شده خود را با گزینه -l ارائه می‌دهد. سایر پیاده‌سازی‌ها ممکن است قابلیت‌های مشابهی داشته باشند. هیچ فراخوانی کتابخانه‌ای پرتابلی وجود ندارد که یک برنامه بتواند از طریق آن به همین اطلاعات دست یابد.
ثبت تمام بایت‌های ارسال‌شده به شبیه‌ساز ترمینال در filename.
+ols
غیرفعال کردن تفسیر شیفت‌های قفل‌کننده در خروجی برنامه.
+osl
غیرفعال کردن تفسیر توالی‌های انتخاب مجموعه نویسه در خروجی برنامه.
+oss
غیرفعال کردن تفسیر شیفت‌های تکی در خروجی برنامه.
+ot
غیرفعال کردن تفسیر تمام توالی‌ها و ارسال دست‌نخورده تمام توالی‌های خروجی برنامه به ترمینال. این ممکن است به نتایج جالبی منجر شود.
هنگام راه‌اندازی، ایجاد یک دست‌تکانی (handshake) میان فرآیندهای والد و فرزند. این گزینه برای برخی سیستم‌های قدیمی‌تر، برای مثال جهت کپی موفقیت‌آمیز تنظیمات ترمینال به شبه‌ترمینال (pty) مورد نیاز است.
تنظیم اولویت ترتیب جستجو برای اطلاعات مجموعه نویسه. پارامتر یک فهرست از کلمات کلیدی است که با کاما از هم جدا شده‌اند. ترتیب پیش‌فرض (شامل تمام کلمات کلیدی) عبارت است از:
fontenc,builtin,iconv,posix
ترتیب پیش‌فرض ابتدا از fontenc استفاده می‌کند زیرا به luit اجازه می‌دهد بسیار سریع‌تر (حدود ۰٫۱ ثانیه) نسبت به استفاده از iconv برای کدگذاری‌های پیچیده مانند eucJP راه‌اندازی شود. با این حال، ممکن است متوجه شوید که پیاده‌سازی iconv دقیق‌تر یا کامل‌تر است. در این حالت، می‌توانید از گزینه -show-iconv برای دریافت یک فایل متنی استفاده کنید که بتوان از آن به‌عنوان یک کدگذاری با پیکربندی fontenc بهره برد.
این گزینه وابسته به پیکربندی luit برای استفاده از iconv است، زیرا کتابخانه fontenc این انتخاب را ارائه نمی‌دهد.
نمایش یک کدگذاری توکار، برای مثال از یک فایل “.enc” با استفاده از قالب “.enc”.
این گزینه وابسته به پیکربندی luit برای استفاده از iconv است، زیرا کتابخانه fontenc فهرستی از کدگذاری‌های توکار ارائه نمی‌دهد.
نمایش یک کدگذاری مشخص، برای مثال از یک فایل “.enc” با استفاده از قالب “.enc”. اگر luit برای استفاده از کتابخانه fontenc پیکربندی شده باشد، اطلاعات را با استفاده از آن کتابخانه به دست می‌آورد. در غیر این صورت luit فایل را مستقیماً می‌خواند.
برخی از کدگذاری‌های fontenc در داخل کتابخانه ساخته شده‌اند. کتابخانه fontenc از آن‌ها با اولویت نسبت به یک فایل خارجی استفاده می‌کند. از گزینه -show-builtin برای ارائه اطلاعات مشابه در زمانی که luit برای استفاده از iconv پیکربندی شده است، استفاده کنید.
نمایش یک کدگذاری مشخص با استفاده از قالب “.enc”. اگر luit برای استفاده از iconv پیکربندی شده باشد، اطلاعات را با استفاده از آن رابط به دست می‌آورد. اگر iconv نتواند اطلاعات را فراهم کند، luit ممکن است از یک جدول توکار استفاده کند.
مقداردهی اولیه luit با استفاده از لوکال و گزینه‌های خط فرمان، اما بدون باز کردن اتصال pty. این گزینه برای آزمایش پیکربندی luit استفاده می‌شود. در صورتی که هیچ خطایی شناسایی نشود، با موفقیت خارج می‌شود. تکرار گزینه -t باعث می‌شود پیام‌های هشدار به‌عنوان خطا در نظر گرفته شوند.
حالت پرگو (verbose). تکرار گزینه، مانند “-v -v”، آن را پرگوتر می‌کند. Luit از getopt استفاده نمی‌کند، بنابراین “-vv” کار نمی‌کند.
خروج به محض پایان فرآیند فرزند. این ممکن است باعث شود luit داده‌ها را در انتهای خروجی فرزند از دست بدهد.
--
پایان گزینه‌ها.

Luit از این متغیرهای محیطی استفاده می‌کند:

محل فایل “encodings.dir” را که کدگذاری‌های موجود در فایل‌های خارجی “.enc” را فهرست می‌کند، بازنویسی می‌کند.
در طول مقداردهی اولیه، luit تابع setlocale را فراخوانی می‌کند تا بررسی کند آیا لوکال کاربر توسط سیستم‌عامل پشتیبانی می‌شود یا خیر. اگر setlocale با شکست مواجه شود، luit به ترتیب این متغیرها را بررسی می‌کند تا از محیط کاربر سرنخ‌هایی درباره ترجیح لوکال به دست آورد.
Luit این متغیر را تنظیم می‌کند تا به ncurses بگوید برای رسم خطوط به کنترل‌های VT100 SI/SO اتکا نکند.
این متغیر معمولاً طبق یک قرارداد توسط پوسته‌هایی غیر از پوسته Bourne تنظیم می‌شود. Luit از این مقدار (به‌جای مدخل کاربر در /etc/passwd) برای تصمیم‌گیری درباره اجرای کدام پوسته استفاده می‌کند. اگر SHELL تنظیم نشده باشد، luit پوسته /bin/sh را اجرا می‌کند.

/usr/share/X11/locale/locale.alias
فایلی که لوکال‌ها را به کدگذاری‌های لوکال نگاشت می‌کند.

هیچ‌کدام از این پیچیدگی‌ها نباید ضروری می‌بود. استفاده از UTF-8 بدون حالت (Stateless UTF-8) در سراسر سیستم، راهکار مناسب است.

مجموعه نویسه‌های دارای بایت میانی غیرساده هنوز پشتیبانی نمی‌شوند.

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

در سیستم‌های دارای ptyهای SVR4 (“Unix-98”) (لینوکس نسخه ۲٫۲ و بالاتر، SVR4)، luit باید توسط کاربر فراخوان اجرا شود.

در سیستم‌های فاقد ptyهای SVR4 (“Unix-98”) (به‌ویژه مشتقات BSD)، اجرای luit توسط یک کاربر عادی باعث می‌شود tty برای همه قابل‌نوشتن (world-writable) باقی بماند؛ این یک رخنه امنیتی است و luit یک هشدار تولید خواهد کرد (اما همچنان اجرا را می‌پذیرد). یک راهکار احتمالی این است که luit به‌صورت suid root تنظیم شود؛ luit باید امتیازات را به اندازه کافی زود رها کند تا این کار امن باشد. با این حال، کد راه‌اندازی به‌طور کامل بررسی و بازرسی نشده است و نویسنده هیچ مسئولیتی در قبال مشکلات امنیتی ناشی از آن نمی‌پذیرد.

Luit اگر به‌صورت setuid نصب شده باشد و نتواند با اطمینان امتیازات را رها کند، از اجرا خودداری خواهد کرد.

معمول‌ترین کاربرد luit تطبیق یک نمونه از XTerm با کدگذاری لوکال است. نسخه‌های فعلی XTerm در صورت نیاز، luit را به‌طور خودکار فراخوانی می‌کنند. اگر از نسخه قدیمی‌تری از XTerm یا یک شبیه‌ساز ترمینال دیگر استفاده می‌کنید، می‌توانید luit را به‌صورت دستی فراخوانی کنید:

$ xterm -u8 -e luit

اگر در یک لوکال UTF-8 کار می‌کنید اما نیاز به دسترسی به یک ماشین راه دور دارید که از UTF-8 پشتیبانی نمی‌کند، luit می‌تواند خروجی راه دور را با ترمینال شما تطبیق دهد:

$ LC_ALL=fr_FR luit ssh legacy-machine

Luit همچنین برای برنامه‌هایی مفید است که کدگذاری خاصی متفاوت از کدگذاری معمول سیستم را در خود تعبیه کرده‌اند یا می‌خواهند از توالی‌های گریز قدیمی برای خروجی چندزبانه استفاده کنند. به‌ویژه، نسخه‌هایی از Emacs که به خوبی با UTF-8 کار نمی‌کنند می‌توانند از luit برای خروجی چندزبانه استفاده کنند:

$ luit -encoding 'ISO 8859-1' emacs -nw

و سپس در Emacs،

M-x set-terminal-coding-system RET iso-2022-8bit-ss2 RET

برنامه Luit توسط Juliusz Chroboczek <jch@pps.jussieu.fr> برای پروژه XFree86 نوشته شده است.

نگهداری luit برای استفاده توسط xterm از سال ۲۰۰۶ بر عهده Thomas E. Dickey بوده است.

موارد پرتابل:

  • xterm(1),
  • ncurses(3X).

موارد مخصوص لینوکس:

  • unicode(1),
  • utf-8(1),
  • charsets(1).

موارد زیر به‌ویژه مفید هستند:

  • Character Code Structure and Extension Techniques (ISO 2022, ECMA-35)
  • Control Functions for Coded Character Sets (ISO 6429, ECMA-48)
  • http://czyborra.com/charsets
X Window System