LUIT(1) General Commands Manual LUIT(1) نام (NAME) luit - فیلتر تبدیل کدگذاری کاراکترها بین برنامه‌ها و شبیه‌سازهای ترمینال UTF-8 خلاصه دستور (SYNOPSIS) luit [ گزینه‌ها ] [ -- ] [ برنامه [ آرگومان‌ها ] ] توضیحات (DESCRIPTION) Luit یک فیلتر است که می‌تواند میان یک برنامه دلخواه و یک شبیه‌ساز ترمینال UTF-8 اجرا شود. این ابزار خروجی برنامه را از کدگذاری محلی (locale) به UTF-8 تبدیل می‌کند و ورودی ترمینال را از UTF-8 به کدگذاری محلی تغییر می‌دهد. Luit ورودی خود را از فرآیند فرزند (یعنی برنامه‌ای که در ترمینال در حال اجراست) می‌خواند. Luit خروجی خود را در ترمینال می‌نویسد. این دو (ورودی و خروجی) می‌توانند کدگذاری‌های متفاوتی داشته باشند. یک برنامه همچنین می‌تواند با استفاده از توالی‌های گریز استاندارد ISO 2022 و ISO 6429، تغییر به یک کدگذاری خروجی دیگر را درخواست کند. استفاده از این ویژگی توصیه نمی‌شود: برنامه‌های چندزبانه باید اصلاح شوند تا مستقیماً خروجی UTF-8 تولید کنند. Luit معمولاً به‌صورت خودکار و شفاف توسط شبیه‌ساز ترمینال فراخوانی می‌شود. برای اطلاعات درباره اجرای luit از خط فرمان، بخش «مثال‌ها» را در ادامه ببینید. گزینه‌ها (OPTIONS) -V چاپ نسخه luit و خروج. -alias filename فایل نام‌های مستعار لوکال (پیش‌فرض: /usr/share/X11/locale/locale.alias). -argv0 name تنظیم نام فرزند (همان‌طور که در argv[0] ارسال می‌شود). -c عمل کردن به‌عنوان یک مبدل ساده از ورودی استاندارد به خروجی استاندارد. -encoding encoding تنظیم luit برای استفاده از encoding به‌جای کدگذاری لوکال جاری. -g0 charset تنظیم مجموعه نویسه خروجی انتخاب‌شده اولیه در G0. مقدار پیش‌فرض به لوکال بستگی دارد، اما معمولاً ASCII است. -g1 charset تنظیم مجموعه نویسه خروجی انتخاب‌شده اولیه در G1. مقدار پیش‌فرض به لوکال بستگی دارد. -g2 charset تنظیم مجموعه نویسه خروجی انتخاب‌شده اولیه در G2. مقدار پیش‌فرض به لوکال بستگی دارد. -g3 charset تنظیم مجموعه نویسه خروجی انتخاب‌شده اولیه در G3. مقدار پیش‌فرض به لوکال بستگی دارد. -gl gn تنظیم انتساب اولیه GL در خروجی. آرگومان باید یکی از g0، g1، g2 یا g3 باشد. مقدار پیش‌فرض به لوکال بستگی دارد، اما معمولاً g0 است. -gr gk تنظیم انتساب اولیه GR در خروجی. مقدار پیش‌فرض به لوکال بستگی دارد و معمولاً g2 است به‌جز برای لوکال‌های EUC که در آن‌ها g1 است. -h نمایش پیام نحوه استفاده و گزینه‌ها در خروجی استاندارد و خروج. -ilog filename ثبت تمام بایت‌های دریافت شده از فرزند در filename. -k7 تولید نویسه‌های ۷-بیتی برای ورودی صفحه‌کلید. -kg0 charset تنظیم مجموعه نویسه ورودی انتخاب‌شده اولیه در G0. مقدار پیش‌فرض به لوکال بستگی دارد، اما معمولاً ASCII است. -kg1 charset تنظیم مجموعه نویسه ورودی انتخاب‌شده اولیه در G1. مقدار پیش‌فرض به لوکال بستگی دارد. -kg2 charset تنظیم مجموعه نویسه ورودی انتخاب‌شده اولیه در G2. مقدار پیش‌فرض به لوکال بستگی دارد. -kg3 charset تنظیم مجموعه نویسه ورودی انتخاب‌شده اولیه در G3. مقدار پیش‌فرض به لوکال بستگی دارد. -kgl gn تنظیم انتساب اولیه GL در ورودی. آرگومان باید یکی از g0، g1، g2 یا g3 باشد. مقدار پیش‌فرض به لوکال بستگی دارد، اما معمولاً g0 است. -kgr gk تنظیم انتساب اولیه GR در ورودی. مقدار پیش‌فرض به لوکال بستگی دارد و معمولاً g2 است به‌جز برای لوکال‌های EUC که در آن‌ها g1 است. -kls تولید شیفت‌های قفل‌کننده (SO/SI) برای ورودی صفحه‌کلید. +kss غیرفعال کردن تولید شیفت‌های تکی برای ورودی صفحه‌کلید. +kssgr استفاده از کدهای GL پس از یک شیفت تکی برای ورودی صفحه‌کلید. به‌طور پیش‌فرض، هنگام تولید ورودی صفحه‌کلید هشت‌بیتی، کدهای GR پس از یک شیفت تکی تولید می‌شوند. -list فهرست کردن مجموعه نویسه‌ها و کدگذاری‌های پشتیبانی‌شده و سپس خروج. 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 ارائه می‌دهد. سایر پیاده‌سازی‌ها ممکن است قابلیت‌های مشابهی داشته باشند. هیچ فراخوانی کتابخانه‌ای پرتابلی وجود ندارد که یک برنامه بتواند از طریق آن به همین اطلاعات دست یابد. -olog filename ثبت تمام بایت‌های ارسال‌شده به شبیه‌ساز ترمینال در filename. +ols غیرفعال کردن تفسیر شیفت‌های قفل‌کننده در خروجی برنامه. +osl غیرفعال کردن تفسیر توالی‌های انتخاب مجموعه نویسه در خروجی برنامه. +oss غیرفعال کردن تفسیر شیفت‌های تکی در خروجی برنامه. +ot غیرفعال کردن تفسیر تمام توالی‌ها و ارسال دست‌نخورده تمام توالی‌های خروجی برنامه به ترمینال. این ممکن است به نتایج جالبی منجر شود. -p هنگام راه‌اندازی، ایجاد یک دست‌تکانی (handshake) میان فرآیندهای والد و فرزند. این گزینه برای برخی سیستم‌های قدیمی‌تر، برای مثال جهت کپی موفقیت‌آمیز تنظیمات ترمینال به شبه‌ترمینال (pty) مورد نیاز است. -prefer list تنظیم اولویت ترتیب جستجو برای اطلاعات مجموعه نویسه. پارامتر یک فهرست از کلمات کلیدی است که با کاما از هم جدا شده‌اند. ترتیب پیش‌فرض (شامل تمام کلمات کلیدی) عبارت است از: fontenc,builtin,iconv,posix ترتیب پیش‌فرض ابتدا از fontenc استفاده می‌کند زیرا به luit اجازه می‌دهد بسیار سریع‌تر (حدود ۰٫۱ ثانیه) نسبت به استفاده از iconv برای کدگذاری‌های پیچیده مانند eucJP راه‌اندازی شود. با این حال، ممکن است متوجه شوید که پیاده‌سازی iconv دقیق‌تر یا کامل‌تر است. در این حالت، می‌توانید از گزینه -show-iconv برای دریافت یک فایل متنی استفاده کنید که بتوان از آن به‌عنوان یک کدگذاری با پیکربندی fontenc بهره برد. این گزینه وابسته به پیکربندی luit برای استفاده از iconv است، زیرا کتابخانه fontenc این انتخاب را ارائه نمی‌دهد. -show-builtin encoding نمایش یک کدگذاری توکار، برای مثال از یک فایل “.enc” با استفاده از قالب “.enc”. این گزینه وابسته به پیکربندی luit برای استفاده از iconv است، زیرا کتابخانه fontenc فهرستی از کدگذاری‌های توکار ارائه نمی‌دهد. -show-fontenc encoding نمایش یک کدگذاری مشخص، برای مثال از یک فایل “.enc” با استفاده از قالب “.enc”. اگر luit برای استفاده از کتابخانه fontenc پیکربندی شده باشد، اطلاعات را با استفاده از آن کتابخانه به دست می‌آورد. در غیر این صورت luit فایل را مستقیماً می‌خواند. برخی از کدگذاری‌های fontenc در داخل کتابخانه ساخته شده‌اند. کتابخانه fontenc از آن‌ها با اولویت نسبت به یک فایل خارجی استفاده می‌کند. از گزینه -show-builtin برای ارائه اطلاعات مشابه در زمانی که luit برای استفاده از iconv پیکربندی شده است، استفاده کنید. -show-iconv encoding نمایش یک کدگذاری مشخص با استفاده از قالب “.enc”. اگر luit برای استفاده از iconv پیکربندی شده باشد، اطلاعات را با استفاده از آن رابط به دست می‌آورد. اگر iconv نتواند اطلاعات را فراهم کند، luit ممکن است از یک جدول توکار استفاده کند. -t مقداردهی اولیه luit با استفاده از لوکال و گزینه‌های خط فرمان، اما بدون باز کردن اتصال pty. این گزینه برای آزمایش پیکربندی luit استفاده می‌شود. در صورتی که هیچ خطایی شناسایی نشود، با موفقیت خارج می‌شود. تکرار گزینه -t باعث می‌شود پیام‌های هشدار به‌عنوان خطا در نظر گرفته شوند. -v حالت پرگو (verbose). تکرار گزینه، مانند “-v -v”، آن را پرگوتر می‌کند. Luit از getopt استفاده نمی‌کند، بنابراین “-vv” کار نمی‌کند. -x خروج به محض پایان فرآیند فرزند. این ممکن است باعث شود luit داده‌ها را در انتهای خروجی فرزند از دست بدهد. -- پایان گزینه‌ها. محیط (ENVIRONMENT) Luit از این متغیرهای محیطی استفاده می‌کند: FONT_ENCODINGS_DIRECTORY محل فایل “encodings.dir” را که کدگذاری‌های موجود در فایل‌های خارجی “.enc” را فهرست می‌کند، بازنویسی می‌کند. LC_ALL LC_CTYPE LANG در طول مقداردهی اولیه، luit تابع setlocale را فراخوانی می‌کند تا بررسی کند آیا لوکال کاربر توسط سیستم‌عامل پشتیبانی می‌شود یا خیر. اگر setlocale با شکست مواجه شود، luit به ترتیب این متغیرها را بررسی می‌کند تا از محیط کاربر سرنخ‌هایی درباره ترجیح لوکال به دست آورد. NCURSES_NO_UTF8_ACS Luit این متغیر را تنظیم می‌کند تا به ncurses بگوید برای رسم خطوط به کنترل‌های VT100 SI/SO اتکا نکند. SHELL این متغیر معمولاً طبق یک قرارداد توسط پوسته‌هایی غیر از پوسته Bourne تنظیم می‌شود. Luit از این مقدار (به‌جای مدخل کاربر در /etc/passwd) برای تصمیم‌گیری درباره اجرای کدام پوسته استفاده می‌کند. اگر SHELL تنظیم نشده باشد، luit پوسته /bin/sh را اجرا می‌کند. فایل‌ها (FILES) /usr/share/X11/locale/locale.alias فایلی که لوکال‌ها را به کدگذاری‌های لوکال نگاشت می‌کند. اشکالات (BUGS) محدودیت‌ها (Limitations) هیچ‌کدام از این پیچیدگی‌ها نباید ضروری می‌بود. استفاده از UTF-8 بدون حالت (Stateless UTF-8) در سراسر سیستم، راهکار مناسب است. مجموعه نویسه‌های دارای بایت میانی غیرساده هنوز پشتیبانی نمی‌شوند. انتخاب مجموعه‌های جایگزین نویسه‌های کنترلی پشتیبانی نمی‌شود و هرگز نخواهد شد. امنیت (Security) در سیستم‌های دارای ptyهای SVR4 (“Unix-98”) (لینوکس نسخه ۲٫۲ و بالاتر، SVR4)، luit باید توسط کاربر فراخوان اجرا شود. در سیستم‌های فاقد ptyهای SVR4 (“Unix-98”) (به‌ویژه مشتقات BSD)، اجرای luit توسط یک کاربر عادی باعث می‌شود tty برای همه قابل‌نوشتن (world- writable) باقی بماند؛ این یک رخنه امنیتی است و luit یک هشدار تولید خواهد کرد (اما همچنان اجرا را می‌پذیرد). یک راهکار احتمالی این است که luit به‌صورت suid root تنظیم شود؛ luit باید امتیازات را به اندازه کافی زود رها کند تا این کار امن باشد. با این حال، کد راه‌اندازی به‌طور کامل بررسی و بازرسی نشده است و نویسنده هیچ مسئولیتی در قبال مشکلات امنیتی ناشی از آن نمی‌پذیرد. Luit اگر به‌صورت setuid نصب شده باشد و نتواند با اطمینان امتیازات را رها کند، از اجرا خودداری خواهد کرد. مثال‌ها (EXAMPLES) معمول‌ترین کاربرد 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 نویسندگان (AUTHORS) برنامه Luit توسط Juliusz Chroboczek برای پروژه XFree86 نوشته شده است. نگهداری luit برای استفاده توسط xterm از سال ۲۰۰۶ بر عهده Thomas E. Dickey بوده است. همچنین ببینید (SEE ALSO) موارد پرتابل: • 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 LUIT(1)