XDM(8) System Manager's Manual XDM(8)

xdm - مدیر نمایش اکس (X Display Manager) با پشتیبانی از XDMCP و انتخاب‌گر میزبان

xdm [ -config configuration_file ] [ -nodaemon ] [ -debug debug_level ] [ -error error_log_file ] [ -resources resource_file ] [ -server server_entry ] [ -session session_program ]

Xdm مجموعه‌ای از نمایشگرهای X را مدیریت می‌کند که می‌توانند روی میزبان محلی یا روی سرورهای راه دور قرار داشته باشند. طراحی xdm بر اساس نیازهای ترمینال‌های X و همچنین استاندارد The Open Group برای XDMCP (پروتکل کنترل مدیر نمایش اکس یا X Display Manager Control Protocol) انجام شده است. Xdm خدماتی مشابه با خدمات ارائه‌شده توسط init، getty و login در ترمینال‌های نویسه‌ای ارائه می‌دهد: درخواست نام کاربری و گذرواژه، احراز هویت کاربر و اجرای یک «نشست» (session).

یک «نشست» بر اساس طول عمر یک فرآیند خاص تعریف می‌شود؛ در دنیای سنتی ترمینال‌های مبتنی بر نویسه، این فرآیند همان شل ورود کاربر است. در زمینه xdm، این فرآیند یک مدیر نشست دلخواه است؛ زیرا در یک محیط پنجره‌ای، فرآیند شل ورود کاربر لزوماً رابطی مشابه ترمینال برای اتصال به آن ندارد. هنگامی که یک مدیر نشست واقعی در دسترس نیست، معمولاً از یک مدیر پنجره (window manager) یا شبیه‌ساز ترمینال به عنوان «مدیر نشست» استفاده می‌شود؛ به این معنی که پایان یافتن این فرآیند، موجب پایان یافتن نشست کاربر خواهد شد.

هنگامی که نشست به پایان می‌رسد، xdm سرور X را بازنشانی (reset) کرده و (در صورت تمایل) کل فرآیند را از نو آغاز می‌کند.

هنگامی که xdm یک پرس‌وجوی غیرمستقیم (Indirect query) را از طریق XDMCP دریافت می‌کند، می‌تواند یک فرآیند chooser (انتخاب‌گر) را اجرا کند تا از طرف نمایشگر، یک BroadcastQuery مبتنی بر XDMCP (یا یک پرس‌وجوی XDMCP به میزبان‌های مشخص‌شده) انجام دهد و منویی از میزبان‌های ممکنی که مدیریت نمایش XDMCP را ارائه می‌دهند، عرضه نماید. این ویژگی برای ترمینال‌های X که خودشان فاقد منوی انتخاب میزبان هستند، بسیار سودمند است.

می‌توان Xdm را به گونه‌ای پیکربندی کرد که پیام‌های BroadcastQuery را از میزبان‌های انتخابی نادیده بگیرد. این قابلیت زمانی مفید است که نمی‌خواهید این میزبان در منوهای ایجادشده توسط chooser یا خود ترمینال‌های X ظاهر شود.

از آنجا که xdm نخستین رابطی است که کاربران مشاهده می‌کنند، طوری طراحی شده است که استفاده از آن ساده بوده و سفارشی‌سازی آن برای نیازهای یک سیستم خاص آسان باشد. Xdm گزینه‌های متعددی دارد که اغلب آنها دارای مقادیر پیش‌فرض مناسبی هستند. بخش‌های مختلف این راهنما را مرور کنید و موارد مورد نیاز خود را برای تغییر انتخاب نمایید. به ویژه به بخش برنامه نشست (SESSION PROGRAM) توجه داشته باشید که نحوه راه‌اندازی و تنظیم سبک نشست مورد نظر را شرح می‌دهد.

xdm بسیار منعطف و قابل پیکربندی است و بیشتر رفتارهای آن را می‌توان توسط فایل‌های منابع (resource files) و اسکریپت‌های شل کنترل کرد. نام‌های این فایل‌ها خود منابعی هستند که از فایل xdm-config یا فایل مشخص‌شده با گزینه -config خوانده می‌شوند.

xdm مدیریت نمایشگرها را به دو روش مختلف ارائه می‌دهد: می‌تواند سرورهای X را که روی ماشین محلی اجرا می‌شوند و در Xservers مشخص شده‌اند مدیریت کند، و همچنین می‌تواند سرورهای X راه دور (معمولاً ترمینال‌های X) را با استفاده از XDMCP (پروتکل کنترل XDM) مطابق آنچه در فایل Xaccess مشخص شده است، مدیریت نماید.

منابع کلاینت‌های X که توسط xdm خارج از نشست کاربر اجرا می‌شوند، از جمله پنجره ورود اختصاصی خود xdm، را می‌توان با تنظیم منابع در فایل Xresources تحت تأثیر قرار داد.

برای ترمینال‌های X که منویی از میزبان‌ها برای دریافت مدیریت نمایش ارائه نمی‌دهند، xdm می‌تواند میزبان‌های مایل به پذیرش را جمع‌آوری کرده و برنامه chooser را برای ارائه منو به کاربر اجرا کند. برای نمایشگرهای X متصل به یک میزبان، این مرحله معمولاً استفاده نمی‌شود، زیرا میزبان محلی خود مدیریت نمایش را بر عهده دارد.

پس از بازنشانی سرور X، دستور xdm اسکریپت Xsetup را اجرا می‌کند تا به تنظیم صفحه‌ای که کاربر مشاهده می‌کند به همراه ویجت xlogin کمک کند.

ویجت xlogin که توسط xdm ارائه می‌شود، کادرهای نام‌آشنای درخواست نام کاربری و گذرواژه را به نمایش می‌گذارد.

پس از ورود کاربر، xdm اسکریپت Xstartup را با دسترسی کاربر ریشه (root) اجرا می‌کند.

سپس xdm اسکریپت Xsession را در قالب کاربر واردشده اجرا می‌کند. این فایل نشست سیستمی ممکن است کارهای مقدماتی بیشتری انجام دهد و معمولاً اسکریپت .xsession را در دایرکتوری خانگی کاربر اجرا می‌کند. هنگامی که اجرای اسکریپت Xsession خاتمه یابد، نشست به پایان رسیده است.

در پایان نشست، اسکریپت Xreset برای پاک‌سازی اجرا می‌شود، سرور X بازنشانی می‌گردد و این چرخه دوباره از ابتدا آغاز می‌شود.

فایل /var/log/xdm.log شامل پیام‌های خطای xdm و تمام خروجی‌های ارسال‌شده به خروجی خطای استاندارد (stderr) توسط Xsetup، Xstartup، Xsession یا Xreset خواهد بود. هنگامی که در راه‌اندازی یا اجرای مناسب xdm با مشکل مواجه شدید، این فایل را بررسی کنید تا ببینید آیا xdm سرنخی از علت مشکل ارائه کرده است یا خیر.

تمام این گزینه‌ها، به جز خود -config، مقدارهایی را تعیین می‌کنند که می‌توان آن‌ها را در فایل پیکربندی به عنوان منبع (resource) نیز مشخص کرد.

نام فایل پیکربندی را تعیین می‌کند که منابع را برای کنترل رفتار xdm مشخص می‌سازد. مقدار پیش‌فرض /etc/X11/xdm/xdm-config است. بخش فایل پیکربندی (CONFIGURATION FILE) را ببینید.
مقدار «false» را برای منبع DisplayManager.daemonMode تعیین می‌کند. این گزینه از رفتار معمول دیمن جلوگیری می‌کند؛ رفتاری که در آن xdm هنگام آغاز به کار، تمام توصیف‌کننده‌های فایل را می‌بندد، خود را از ترمینال کنترل‌کننده جدا می‌کند و در پس‌زمینه قرار می‌گیرد.
مقدار عددی منبع DisplayManager.debugLevel را تعیین می‌کند. یک مقدار غیرصفر باعث می‌شود xdm پیام‌های اشکال‌زدایی فراوانی را در ترمینال چاپ کند؛ همچنین منبع DisplayManager.daemonMode را غیرفعال کرده و xdm را مجبور به اجرای همگام (synchronous) می‌کند. برای تفسیر این پیام‌های اشکال‌زدایی، دسترسی به یک نسخه از کد منبع xdm تقریباً الزامی است. هیچ تلاشی برای منطقی‌سازی یا استانداردسازی این خروجی انجام نشده است.
مقدار منبع DisplayManager.errorLogFile را تعیین می‌کند. این فایل شامل خطاهای xdm و همچنین هر متنی است که توسط اسکریپت‌ها و برنامه‌های مختلف در طول پیشرفت نشست به stderr ارسال شده باشد.
مقدار منبع DisplayManager*resources را تعیین می‌کند. این فایل با استفاده از xrdb(1) بارگذاری می‌شود تا پارامترهای پیکربندی را برای ویجت احراز هویت تعیین کند.
مقدار منبع DisplayManager.servers را تعیین می‌کند. برای شرح این منبع، بخش مشخص‌سازی سرور محلی (LOCAL SERVER SPECIFICATION) را ببینید.
مقدار منبع DisplayManager.requestPort را تعیین می‌کند. این منبع شماره درگاهی را تنظیم می‌کند که xdm در آن به درخواست‌های XDMCP گوش می‌دهد. اگر روی 0 تنظیم شود، xdm به درخواست‌های XDMCP یا Chooser گوش نخواهد داد. از آنجا که XDMCP از پورت شناخته‌شده و ثبت‌شده UDP شماره 177 استفاده می‌کند، این منبع نباید به مقداری جز 0 تغییر یابد، مگر به منظور اشکال‌زدایی.
مقدار منبع DisplayManager*session را تعیین می‌کند. این گزینه برنامه‌ای را مشخص می‌کند که پس از ورود کاربر به عنوان نشست اجرا می‌شود.
امکان تعیین یک منبع دلخواه را فراهم می‌کند، همانند اکثر برنامه‌های X Toolkit.

در بسیاری از مراحل، اقدامات xdm را می‌توان با استفاده از فایل پیکربندی آن که در قالب منابع X (X resource) است کنترل کرد. برخی منابع رفتار xdm را روی تمام نمایشگرها تغییر می‌دهند، در حالی که برخی دیگر رفتار آن را روی یک نمایشگر خاص تغییر می‌دهند. در مواردی که اقدامات به یک نمایشگر خاص مربوط می‌شوند، نام نمایشگر در نام منبع بین «DisplayManager» و بخش پایانی نام منبع درج می‌شود.

برای نمایشگرهای محلی، نام و کلاس منبع همان مواردی است که از فایل Xservers خوانده می‌شود.

برای نمایشگرهای راه دور، نام منبع همان چیزی است که آدرس شبکه نمایشگر به آن بازشناسی (resolve) می‌شود. منبع removeDomain را ببینید. نام باید کاملاً مطابقت داشته باشد؛ xdm از تمام نام‌های مستعار شبکه‌ای که ممکن است به یک نمایشگر خاص برسند آگاه نیست. اگر بازشناسی نام ناموفق باشد، از آدرس استفاده می‌شود. کلاس منبع همان چیزی است که توسط نمایشگر در درخواست XDMCP Manage ارسال می‌شود.

از آنجا که مدیر منابع از دو‌نقطه (:) برای جدا کردن نام منبع از مقدار آن و از نقطه (.) برای جدا کردن بخش‌های نام منبع استفاده می‌کند، xdm هنگام تولید نام منبع، خط زیر (_) را جایگزین نقطه‌ها و دونقطه‌ها می‌کند. به عنوان مثال، DisplayManager.expo_x_org_0.startup نام منبعی است که فایل شل راه‌اندازی اولیه را برای نمایشگر «expo.x.org:0» تعیین می‌کند.

این منبع یا نام فایلی پر از ورودی‌های سرور (در هر سطر یک ورودی، اگر مقدار با اسلش شروع شود) را مشخص می‌کند، یا شامل یک تک‌ورودی سرور است. برای جزئیات، بخش مشخص‌سازی سرور محلی (LOCAL SERVER SPECIFICATION) را ببینید.
این منبع شماره پورت UDP را نشان می‌دهد که xdm برای گوش دادن به درخواست‌های ورودی XDMCP استفاده می‌کند. مگر اینکه نیاز به اشکال‌زدایی سیستم داشته باشید، این مقدار را روی مقدار پیش‌فرض 177 رها کنید.
خروجی خطا معمولاً به کنسول سیستم هدایت می‌شود. برای تغییر مسیر آن، این منبع را روی یک نام فایل تنظیم کنید. روشی برای ارسال این پیام‌ها به syslog باید برای سیستم‌هایی که از آن پشتیبانی می‌کنند توسعه داده شود؛ با این حال، تنوع گسترده رابط‌ها مانع از پیاده‌سازی مستقل از سیستم می‌شود. این فایل همچنین شامل هرگونه خروجی هدایت‌شده به stderr توسط فایل‌های Xsetup، Xstartup، Xsession و Xreset است، بنابراین شامل شرح مشکلات موجود در آن اسکریپت‌ها نیز خواهد بود.
اگر مقدار عددی صحیح این منبع بزرگتر از صفر باشد، حجم انبوهی از اطلاعات اشکال‌زدایی چاپ خواهد شد. همچنین حالت دیمن را غیرفعال می‌کند (حالتی که اطلاعات را روانه سطل زباله بیتی می‌کرد) و به کاربران غیر ریشه اجازه می‌دهد xdm را اجرا کنند که در حالت عادی چندان کاربردی نیست.
در حالت عادی، xdm تلاش می‌کند خود را به یک فرآیند دیمن بدون وابستگی به هیچ ترمینالی تبدیل کند. این کار با انشعاب (forking) و رها کردن فرآیند والد برای خروج انجام می‌شود؛ سپس بستن توصیف‌کننده‌های فایل و آزادسازی ترمینال کنترل‌کننده صورت می‌پذیرد. در برخی محیط‌ها این رفتار مطلوب نیست (به ویژه هنگام اشکال‌زدایی). تنظیم این منبع روی «false» این ویژگی را غیرفعال می‌کند.
نام فایل مشخص‌شده ایجاد خواهد شد تا حاوی نمایش متنی ASCII از شناسه فرآیند (PID) فرآیند اصلی xdm باشد. Xdm همچنین از قفل‌گذاری فایل روی این فایل استفاده می‌کند تا از اجرای همزمان چند دیمن بر روی یک ماشین جلوگیری کند؛ اتفاقی که می‌توانست آشفتگی زیادی ایجاد نماید.
این منبعی است که تعیین می‌کند آیا xdm از قفل‌گذاری فایل برای جلوگیری از تداخل و خارج از کنترل شدن چندین مدیر نمایش استفاده کند یا خیر. در System V، این قابلیت از فراخوانی کتابخانه‌ای lockf استفاده می‌کند، در حالی که در BSD از flock بهره می‌برد.
این منبع دایرکتوری‌ای را نام می‌برد که xdm فایل‌های مجوز و احراز هویت را در حین راه‌اندازی نشست در آن ذخیره می‌کند. مقدار پیش‌فرض /var/lib/xdm است. می‌تواند برای نمایشگرهای خاص توسط DisplayManager.DISPLAY.authFile لغو شود.
این متغیر بولی مشخص می‌کند که آیا xdm پس از پایان یک نشست و در صورت تغییر فایل‌ها، فایل‌های پیکربندی، سرورها، کنترل دسترسی و کلیدهای احراز هویت را مجدداً بررسی و پویش کند یا خیر. به طور پیش‌فرض مقدار آن «true» است. می‌توانید با ارسال سیگنال SIGHUP به فرآیند اصلی، xdm را مجبور به خواندن مجدد این فایل‌ها کنید.
هنگام محاسبه نام نمایشگر برای کلاینت‌های XDMCP، تحلیل‌گر نام (name resolver) معمولاً یک نام میزبان کاملاً واجد شرایط (FQDN) برای ترمینال ایجاد می‌کند. از آنجا که این موضوع گاهی گیج‌کننده است، در صورتی که این متغیر تنظیم شده باشد و نام دامنه ترمینال با نام دامنه میزبان محلی یکسان باشد، xdm بخش نام دامنه را از نام میزبان حذف می‌کند. به طور پیش‌فرض مقدار آن «true» است.
احراز هویت XDMCP از نوع XDM-AUTHENTICATION-1 نیازمند آن است که یک کلید خصوصی میان xdm و ترمینال به اشتراک گذاشته شود. این منبع فایلی را مشخص می‌کند که حاوی این مقادیر است. هر ورودی در این فایل شامل یک نام نمایشگر و کلید مشترک است.
برای جلوگیری از ارائه غیرمجاز سرویس XDMCP و امکان فوروارد درخواست‌های IndirectQuery در XDMCP، این فایل حاوی پایگاه داده‌ای از نام‌های میزبان است که یا دسترسی مستقیم به این ماشین به آن‌ها داده شده است، یا دارای فهرستی از میزبان‌ها هستند که پرس‌وجوها باید به آن‌ها هدایت شوند. قالب این فایل در بخش کنترل دسترسی XDMCP (XDMCP ACCESS CONTROL) شرح داده شده است.
فهرستی از متغیرهای محیطی اضافی که با فاصله از هم جدا شده‌اند، تا به برنامه‌های Xsetup، Xstartup، Xsession و Xreset منتقل شوند.
فایلی برای خواندن ۸ بایت جهت تولید بذر کلیدهای احراز هویت. پیش‌فرض /dev/urandom است. اگر این فایل قابل خواندن نباشد، یا اگر یک عملیات خواندن بیش از ۵ ثانیه مسدود شود، xdm به استفاده از چِک‌سام DisplayManager.randomFile برای تولید بذر برمی‌گردد.
در سیستم‌هایی که از کتابخانه خوش‌آمدگویی با بارگذاری پویا پشتیبانی می‌کنند، نام کتابخانه را مشخص می‌کند. پیش‌فرض /usr/lib/X11/xdm/libXdmGreet.so است.
تعداد ثانیه‌هایی که باید پس از انتخاب یک میزبان از chooser توسط کاربر، منتظر پاسخ نمایشگر ماند. اگر نمایشگر یک XDMCP IndirectQuery در این بازه زمانی ارسال کند، درخواست به میزبان انتخاب‌شده هدایت می‌شود. در غیر این صورت، فرض می‌شود که مربوط به یک نشست جدید است و منوی chooser مجدداً ارائه می‌شود. پیش‌فرض 15 است.
در میزبان‌های دارای چند رابط شبکه (multihomed)، از آدرس عددی IP اتصال ورودی به جای نام میزبان استفاده می‌کند. این کار برای جلوگیری از تلاش برای اتصال روی رابط شبکه اشتباهی است که ممکن است در آن زمان غیرفعال باشد.
برنامه‌ای را مشخص می‌کند که با دسترسی کاربر ریشه در هنگام دریافت یک XDMCP BroadcastQuery اجرا می‌شود، در صورتی که این میزبان برای ارائه مدیریت نمایش XDMCP پیکربندی شده باشد. خروجی این برنامه ممکن است در پنجره انتخاب‌گر (chooser) نمایش داده شود. اگر برنامه‌ای مشخص نشده باشد، رشته Willing to manage ارسال می‌شود.
این منبع نام فایلی را مشخص می‌کند که باید توسط xrdb به عنوان پایگاه داده منابع روی پنجره ریشه صفحه 0 نمایشگر بارگذاری شود. برنامه Xsetup، ویجت ورود (Login) و chooser از منابع تعیین‌شده در این فایل استفاده خواهند کرد. این پایگاه داده منابع درست قبل از شروع فرآیند احراز هویت بارگذاری می‌شود، بنابراین می‌تواند ظاهر پنجره ورود را کنترل کند. بخش ویجت احراز هویت (AUTHENTICATION WIDGET) را ببینید که منابع مختلف مناسب برای قرار دادن در این فایل را شرح می‌دهد. هیچ مقدار پیش‌فرضی برای این منبع وجود ندارد، اما /etc/X11/xdm/Xresources نام مرسوم و استاندارد آن است.
برنامه‌ای را تعیین می‌کند که برای ارائه منوی میزبان‌ها برای پرس‌وجوهای غیرمستقیم تغییرمسیریافته به نام میزبان ویژه CHOOSER اجرا می‌شود. پیش‌فرض /usr/lib/X11/xdm/chooser است. بخش‌های کنترل دسترسی XDMCP (XDMCP ACCESS CONTROL) و انتخاب‌گر (CHOOSER) را ببینید.
برنامه مورد استفاده برای بارگذاری منابع را تعیین می‌کند. به طور پیش‌فرض، xdm از /usr/bin/xrdb استفاده می‌کند.
برنامه‌ای را تعیین می‌کند که (با دسترسی root) پیش از ارائه پنجره ورود اجرا می‌شود. این برنامه می‌تواند برای تغییر ظاهر صفحه در اطراف پنجره ورود یا نمایش پنجره‌های دیگر استفاده شود (به عنوان مثال، شاید بخواهید xconsole را در اینجا اجرا کنید). به طور پیش‌فرض هیچ برنامه‌ای اجرا نمی‌شود. نام مرسوم برای فایل مورد استفاده در اینجا Xsetup است. بخش برنامه راه‌اندازی (SETUP PROGRAM) را ببینید.
برنامه‌ای را مشخص می‌کند که (با دسترسی root) پس از موفقیت در فرآیند احراز هویت اجرا می‌شود. به طور پیش‌فرض هیچ برنامه‌ای اجرا نمی‌شود. نام مرسوم برای فایل مورد استفاده در اینجا Xstartup است. بخش برنامه شروع اولیه (STARTUP PROGRAM) را ببینید.
نشستی را که باید اجرا شود مشخص می‌کند (بدون دسترسی root اجرا می‌شود). به طور پیش‌فرض، /usr/bin/xterm اجرا می‌شود. نام مرسوم Xsession است. بخش برنامه نشست (SESSION PROGRAM) را ببینید.
برنامه‌ای را مشخص می‌کند که (با دسترسی root) پس از پایان نشست اجرا می‌شود. به طور پیش‌فرض، هیچ برنامه‌ای اجرا نمی‌شود. نام مرسوم Xreset است. بخش برنامه بازنشانی (RESET PROGRAM) را ببینید.
این منابع عددی رفتار xdm را هنگام تلاش برای باز کردن سرورهای سرکش و ناسازگار کنترل می‌کنند. openDelay طول مکث بر حسب ثانیه بین تلاش‌های متوالی است، openRepeat تعداد تلاش‌های انجام‌شده است، openTimeout مدت زمانی است که در هنگام تلاش واقعی برای باز کردن منتظر می‌ماند (یعنی حداکثر زمان سپری‌شده در فراخوانی سیستمی connect(2)) و startAttempts تعداد دفعاتی است که این کل فرآیند قبل از قطع امید از سرور انجام می‌شود. پس از اینکه openRepeat تلاش انجام شد، یا اگر در هر تلاش خاص openTimeout ثانیه سپری شود، xdm سرور را خاتمه داده و مجدداً راه‌اندازی می‌کند و برای اتصال دوباره تلاش می‌نماید. این فرآیند به تعداد startAttempts بار تکرار می‌شود و در آن نقطه نمایشگر از کار افتاده تلقی شده و غیرفعال می‌گردد. اگرچه این رفتار ممکن است دلخواه به نظر برسد، اما به صورت تجربی ایجاد شده و روی بیشتر سیستم‌ها به خوبی کار می‌کند. کران reservAttempts تعداد دفعاتی است که یک اتصال موفق مجاز است به دنبال یک خطای مهلک رخ دهد. هنگامی که به این حد برسد، نمایشگر غیرفعال می‌شود. مقادیر پیش‌فرض عبارتند از: openDelay: 15، openRepeat: 5، openTimeout: 120، startAttempts: 4 و reservAttempts: 2.
برای کشف زمان ناپدید شدن نمایشگرهای راه دور، xdm گاه‌به‌گاه آن‌ها را با استفاده از اتصال X و فراخوانی‌های XSync پینگ می‌کند. pingInterval زمان (بر حسب دقیقه) بین هر تلاش پینگ را مشخص می‌کند، pingTimeout حداکثر زمان (بر حسب دقیقه) را برای منتظر ماندن جهت پاسخگویی ترمینال به درخواست تعیین می‌نماید. اگر ترمینال پاسخ ندهد، نشست از بین رفته تلقی شده و خاتمه می‌یابد. به طور پیش‌فرض، هر دو روی 5 دقیقه تنظیم شده‌اند. اگر مکرراً از ترمینال‌های X استفاده می‌کنید که ممکن است ارتباطشان با میزبان مدیریت‌کننده قطع شود، شاید بخواهید این مقدار را افزایش دهید. تنها نگرانی این است که نشست‌ها پس از غیرفعال شدن تصادفی ترمینال همچنان به حیات خود ادامه دهند. xdm نمایشگرهای محلی را پینگ نمی‌کند. اگرچه این کار بی‌ضرر به نظر می‌رسد، اما زمانی که نشست ایستگاه کاری در نتیجه معلق ماندن سرور برای سرویس NFS و عدم پاسخگویی به پینگ خاتمه یابد، بسیار ناخوشایند است.
این منبع بولی مشخص می‌کند که آیا سرور X هنگام خاتمه یافتن نشست باید متوقف شود (به جای بازنشانی آن). این گزینه می‌تواند زمانی استفاده شود که سرور در طول زمان تمایل به رشد بی‌رویه مصرف حافظه دارد، تا مدت زمان اجرای سرور محدود گردد. مقدار پیش‌فرض «false» است.
Xdm متغیر محیطی PATH را برای نشست روی این مقدار تنظیم می‌کند. این مقدار باید فهرستی از دایرکتوری‌ها باشد که با دونقطه از هم جدا شده‌اند؛ برای توضیحات کامل به sh(1) مراجعه کنید. مقدار پیش‌فرض «/usr/local/bin:/usr/bin:/bin» است.
Xdm متغیر محیطی PATH را برای اسکریپت‌های شروع اولیه و بازنشانی روی مقدار این منبع تنظیم می‌کند. پیش‌فرض برای این منبع «/usr/local/bin:/usr/bin:/bin» است. به نبودن «.» در این ورودی توجه کنید. این یک شیوه مناسب برای کاربر ریشه (root) است؛ زیرا از بسیاری از روش‌های رایج نفوذ اسب تروجان به سیستم جلوگیری می‌کند.
Xdm متغیر محیطی SHELL را برای اسکریپت‌های شروع اولیه و بازنشانی روی مقدار این منبع تنظیم می‌کند. به طور پیش‌فرض /bin/sh است.
اگر اجرای نشست پیش‌فرض با شکست مواجه شود، xdm به این برنامه رجوع می‌کند. این برنامه بدون هیچ آرگومانی اجرا می‌شود، اما از همان متغیرهای محیطی استفاده می‌کند که نشست باید می‌داشت (بخش برنامه نشست (SESSION PROGRAM) را ببینید). به طور پیش‌فرض، /usr/bin/xterm استفاده می‌شود.
برای ارتقای امنیت، xdm در حین خواندن نام کاربری و گذرواژه، سرور و صفحه‌کلید را به انحصار خود درمی‌آورد (grab می‌کند). منبع grabServer مشخص می‌کند که آیا سرور باید در تمام طول خواندن نام و گذرواژه در حالت انحصاری نگه داشته شود یا خیر. هنگامی که روی «false» باشد، سرور پس از موفقیت در انحصار صفحه‌کلید از حالت انحصاری خارج می‌شود؛ در غیر این صورت سرور تا درست قبل از شروع نشست در حالت انحصاری باقی می‌ماند. مقدار پیش‌فرض «false» است. منبع grabTimeout حداکثر زمانی را که xdm برای موفقیت‌آمیز بودن انحصار منتظر می‌ماند، مشخص می‌کند. این انحصار ممکن است در صورتی که کلاینت دیگری سرور را به انحصار درآورده باشد، یا احتمالاً اگر تأخیر شبکه بسیار بالا باشد، شکست بخورد. این منبع مقدار پیش‌فرضی برابر با ۳ ثانیه دارد؛ هنگام افزایش آن باید محتاط باشید، زیرا یک کاربر ممکن است توسط یک پنجره جعلی مشابه در صفحه فریب بخورد. اگر انحصار شکست بخورد، xdm سرور (در صورت امکان) و نشست را متوقف کرده و مجدداً راه‌اندازی می‌کند.
authorize یک منبع بولی است که کنترل می‌کند آیا xdm مجوز اتصال سرور محلی را تولید کرده و به کار می‌گیرد یا خیر. اگر مجوزدهی استفاده شود، authName فهرستی از سازوکارهای مجوزدهی مورد استفاده است که با فاصله جدا شده‌اند. اتصالات XDMCP به صورت پویا مشخص می‌کنند که چه سازوکارهای احراز هویتی پشتیبانی می‌شوند، بنابراین authName در این حالت نادیده گرفته می‌شود. هنگامی که authorize برای یک نمایشگر تنظیم شده باشد و احراز هویت در دسترس نباشد، با نمایش پیامی متفاوت در ویجت ورود، به کاربر اطلاع داده می‌شود. به طور پیش‌فرض، authorize برابر «true» و authName برابر «MIT-MAGIC-COOKIE-1» است؛ یا در صورت در دسترس بودن XDM-AUTHORIZATION-1، برابر «XDM-AUTHORIZATION-1 MIT-MAGIC-COOKIE-1».
این فایل برای انتقال داده‌های مجوزدهی از xdm به سرور، با استفاده از گزینه خط فرمان سرور -auth استفاده می‌شود. این فایل باید در دایرکتوری‌ای نگهداری شود که برای همه قابل نوشتن نباشد؛ چرا که به راحتی می‌تواند حذف شود و سازوکار مجوزدهی را در سرور غیرفعال سازد. در صورت مشخص نشدن، نامی از DisplayManager.authDir و نام نمایشگر ایجاد می‌شود.
اگر روی «false» تنظیم شود، استفاده از unsecureGreeting را در پنجره ورود غیرفعال می‌کند. بخش ویجت احراز هویت (AUTHENTICATION WIDGET) را ببینید. پیش‌فرض «true» است.
شماره سیگنالی که xdm برای بازنشانی سرور ارسال می‌کند. بخش کنترل سرور (CONTROLLING THE SERVER) را ببینید. پیش‌فرض 1 (SIGHUP) است.
شماره سیگنالی که xdm برای خاتمه دادن به سرور ارسال می‌کند. بخش کنترل سرور (CONTROLLING THE SERVER) را ببینید. پیش‌فرض 15 (SIGTERM) است.
پیاده‌سازی اولیه مجوزدهی در سرور نمونه، فایل مجوز را در زمان بازنشانی سرور مجدداً می‌خواند، نه هنگام بررسی اتصال اولیه. از آنجا که xdm اطلاعات مجوزدهی را درست قبل از اتصال به نمایشگر تولید می‌کند، یک سرور قدیمی اطلاعات مجوزدهی به‌روز را دریافت نمی‌کرد. این منبع باعث می‌شود xdm پس از تنظیم فایل، سیگنال SIGHUP را به سرور ارسال کند که موجب یک بازنشانی اضافی سرور می‌شود و در طول این مدت اطلاعات مجوزدهی جدید خوانده خواهد شد. پیش‌فرض «false» است که برای تمام سرورهای MIT به خوبی کار می‌کند.
هنگامی که xdm قادر به نوشتن در فایل معمول مجوز کاربر ($HOME/.Xauthority) نباشد، یک نام فایل یکتا در این دایرکتوری ایجاد می‌کند و متغیر محیطی XAUTHORITY را به فایل ایجادشده هدایت می‌نماید. به طور پیش‌فرض از /tmp استفاده می‌کند.

ابتدا باید فایل پیکربندی xdm راه‌اندازی شود. دایرکتوری‌ای ایجاد کنید (معمولاً /etc/X11/xdm) که شامل تمام فایل‌های مرتبط باشد.

در اینجا یک فایل پیکربندی مناسب آورده شده است که می‌تواند xdm-config نامیده شود:

DisplayManager.servers:         /etc/X11/xdm/Xservers
DisplayManager.errorLogFile:    /var/log/xdm.log
DisplayManager*resources:       /etc/X11/xdm/Xresources
DisplayManager*startup:         /etc/X11/xdm/Xstartup
DisplayManager*session:         /etc/X11/xdm/Xsession
DisplayManager.pidFile:         /var/run/xdm-pid
DisplayManager._0.authorize:    true
DisplayManager*authorize:       false

توجه داشته باشید که این فایل بیشتر حاوی ارجاع به فایل‌های دیگر است. همچنین توجه داشته باشید که برخی از منابع با «*» برای جدا کردن مؤلفه‌ها مشخص شده‌اند. این منابع را می‌توان با جایگزین کردن «*» با نام نمایشگر برای هر نمایشگر متفاوت یکتا کرد، اما در حالت عادی این کار چندان کاربردی نیست. برای بحث کامل، بخش منابع و پیکربندی (RESOURCES) را ببینید.

فایل پایگاه داده مشخص‌شده توسط DisplayManager.accessFile اطلاعاتی را ارائه می‌دهد که xdm از آن‌ها برای کنترل دسترسی نمایشگرهایی که درخواست سرویس XDMCP دارند استفاده می‌کند. این فایل شامل سه نوع ورودی است: ورودی‌هایی که پاسخ به پرس‌وجوهای مستقیم (Direct) و سراسری (Broadcast) را کنترل می‌کنند، ورودی‌هایی که پاسخ به پرس‌وجوهای غیرمستقیم (Indirect) را کنترل می‌کنند، و تعاریف ماکروها.

قالب ورودی‌های مستقیم ساده است، یا یک نام میزبان یا یک الگو است که با درج یک یا چند نویسه متا («*» با هر دنباله‌ای از ۰ یا چند نویسه مطابقت دارد، و «?» با هر تک‌نویسه‌ای مطابقت دارد) که با نام میزبان دستگاه نمایشگر مقایسه می‌شوند، از نام میزبان متمایز می‌گردد. اگر ورودی نام میزبان باشد، تمام مقایسه‌ها با استفاده از آدرس‌های شبکه انجام می‌شوند، بنابراین هر نامی که به آدرس شبکه صحیح تبدیل شود می‌تواند استفاده شود. برای الگوها، تنها از نام‌های استاندارد (canonical) میزبان در مقایسه استفاده می‌شود، بنابراین اطمینان حاصل کنید که تلاشی برای تطبیق با نام‌های مستعار نکنید. قرار دادن نویسه «!» قبل از یک نام میزبان یا یک الگو باعث می‌شود میزبان‌هایی که با آن ورودی مطابقت دارند مستثنی گردند.

برای پاسخ دادن تنها به پرس‌وجوهای مستقیم برای یک میزبان یا الگو، می‌توان کلمه کلیدی اختیاری «NOBROADCAST» را پس از آن قرار داد. این کار می‌تواند برای جلوگیری از نمایش یک سرور xdm در منوهای مبتنی بر پرس‌وجوهای Broadcast استفاده شود.

یک ورودی غیرمستقیم نیز حاوی یک نام میزبان یا الگو است، اما به دنبال آن فهرستی از نام‌های میزبان یا ماکروهایی می‌آید که پرس‌وجوهای غیرمستقیم باید به آن‌ها ارسال شوند.

یک تعریف ماکرو شامل یک نام ماکرو و فهرستی از نام‌های میزبان و سایر ماکروهایی است که ماکرو به آن‌ها گسترش می‌یابد. برای تشخیص ماکروها از نام‌های میزبان، نام ماکروها با یک نویسه «%» آغاز می‌شود. ماکروها می‌توانند تو در تو باشند.

ورودی‌های غیرمستقیم همچنین ممکن است مشخص کنند که xdm برنامه chooser را برای ارائه منویی از میزبان‌ها جهت اتصال اجرا کند. بخش انتخاب‌گر (CHOOSER) را ببینید.

هنگام بررسی دسترسی برای یک میزبان نمایشگر خاص، هر ورودی به نوبت بررسی می‌شود و اولین ورودی منطبق، پاسخ را تعیین می‌کند. ورودی‌های مستقیم و سراسری (Direct و Broadcast) هنگام پویش برای یک ورودی غیرمستقیم نادیده گرفته می‌شوند و بالعکس.

خطوط خالی نادیده گرفته می‌شوند، «#» به عنوان جداکننده توضیحات در نظر گرفته می‌شود و باعث نادیده گرفته شدن ادامه آن خط می‌گردد، و «\newline» باعث نادیده گرفته شدن خط جدید می‌شود که امکان گسترش فهرست میزبان‌های غیرمستقیم در چند خط را فراهم می‌آورد.

در اینجا یک نمونه فایل Xaccess آورده شده است:

#
# Xaccess - XDMCP access control file
#
#
# Direct/Broadcast query entries
#
!xtra.lcs.mit.edu       # disallow direct/broadcast service for xtra
bambi.ogi.edu           # allow access from this particular display
*.lcs.mit.edu           # allow access from any display in LCS
*.deshaw.com    NOBROADCAST     # allow only direct access
*.gw.com                        # allow direct and broadcast
#
# Indirect query entries
#
%HOSTS  expo.lcs.mit.edu xenon.lcs.mit.edu \
        excess.lcs.mit.edu kanga.lcs.mit.edu
extract.lcs.mit.edu     xenon.lcs.mit.edu  #force extract to contact xenon
!xtra.lcs.mit.edu       dummy              #disallow indirect access
*.lcs.mit.edu           %HOSTS             #all others get to choose

اگر با پشتیبانی از IPv6 کامپایل شده باشد، گروه‌های آدرس چندپخشی (multicast) نیز ممکن است در فهرست آدرس‌هایی که پرس‌وجوهای غیرمستقیم به آن‌ها تنظیم می‌شوند گنجانده شوند. آدرس‌های چندپخشی می‌توانند با یک نویسه اختیاری / و تعداد پرش (hop count) همراه باشند. اگر تعداد پرش مشخص نشده باشد، تعداد پرش چندپخشی به طور پیش‌فرض 1 خواهد بود که بسته را در شبکه محلی نگه می‌دارد. برای چندپخشی در IPv4، تعداد پرش به عنوان TTL استفاده می‌شود.

مثال‌ها:

rincewind.sample.net  ff02::1 #IPv6 Multicast to ff02::1
                              #with a hop count of 1
ponder.sample.net     CHOOSER 239.192.1.1/16  #Offer a menu of hosts
                                              #who respond to IPv4 Multicast
                                              #to 239.192.1.1 with a
                                              #TTL of 16

برای ترمینال‌های X که منوی میزبان را برای استفاده با پرس‌وجوهای Broadcast یا Indirect ارائه نمی‌دهند، برنامه chooser می‌تواند این کار را برای آن‌ها انجام دهد. در فایل Xaccess، «CHOOSER» را به عنوان اولین ورودی در فهرست میزبان‌های غیرمستقیم مشخص کنید. Chooser یک درخواست Query به هر یک از نام‌های میزبان باقی‌مانده در فهرست ارسال می‌کند و منویی از تمام میزبان‌هایی که پاسخ می‌دهند ارائه می‌دهد.

این فهرست ممکن است شامل کلمه «BROADCAST» باشد، که در این صورت chooser به جای آن یک Broadcast ارسال می‌کند و مجدداً منویی از تمام میزبان‌هایی که پاسخ می‌دهند ارائه می‌نماید. توجه داشته باشید که در برخی سیستم‌عامل‌ها، بسته‌های UDP نمی‌توانند برودکست شوند، بنابراین این ویژگی در آن سیستم‌ها کار نخواهد کرد.

نمونه فایل Xaccess با استفاده از chooser:

extract.lcs.mit.edu CHOOSER %HOSTS      #offer a menu of these hosts
xtra.lcs.mit.edu    CHOOSER BROADCAST   #offer a menu of all hosts

برنامه مورد استفاده برای chooser توسط منبع DisplayManager.DISPLAY.chooser مشخص می‌شود. برای انعطاف‌پذیری بیشتر در این مرحله، chooser می‌تواند یک اسکریپت شل باشد. Chooser در اینجا مدیر نشست است؛ این برنامه به جای فرآیند فرزند xdm برای مدیریت نمایشگر اجرا می‌شود.

منابع مربوط به این برنامه را می‌توان در فایلی قرار داد که توسط DisplayManager.DISPLAY.resources مشخص شده است.

هنگامی که کاربر میزبانی را انتخاب می‌کند، chooser میزبان انتخاب‌شده را چاپ می‌کند که توسط فرآیند والد xdm خوانده می‌شود، و سپس خارج می‌گردد. xdm اتصال خود به سرور X را می‌بندد، و سرور بازنشانی شده و یک درخواست XDMCP Indirect دیگر ارسال می‌کند. xdm انتخاب کاربر را (به مدت DisplayManager.choiceTimeout ثانیه) به خاطر می‌سپارد و درخواست را به میزبان انتخاب‌شده هدایت می‌کند، که نشستی را روی آن نمایشگر آغاز می‌نماید.

دستورالعمل پیکربندی زیر نیز برای فایل پیکربندی Xaccess تعریف شده است:

interface ممکن است یک نام میزبان یا آدرس IP باشد که نشان‌دهنده یک رابط شبکه روی این ماشین است، یا نویسه عام * برای نشان دادن تمام رابط‌های شبکه موجود باشد.

اگر یک یا چند خط LISTEN مشخص شده باشد، xdm تنها روی رابط‌های شبکه مشخص‌شده به اتصالات XDMCP گوش می‌دهد. اگر آدرس‌های گروه چندپخشی در یک خط listen فهرست شده باشند، xdm در رابط شبکه ارائه‌شده به گروه‌های چندپخشی می‌پیوندد.

اگر هیچ خط LISTEN داده نشود، رفتار اصلی گوش دادن روی تمام رابط‌های شبکه برای سازگاری با گذشته حفظ می‌شود. علاوه بر این، اگر هیچ LISTEN مشخص نشده باشد، در صورت کامپایل با پشتیبانی از IPv6، xdm به گروه چندپخشی پیش‌فرض IPv6 برای XDMCP می‌پیوندد.

برای غیرفعال کردن کامل گوش دادن به اتصالات XDMCP، می‌توان یک خط LISTEN بدون هیچ آدرسی مشخص کرد، یا از روش قبلاً پشتیبانی‌شده تنظیم DisplayManager.requestPort روی 0 استفاده نمود.

مثال‌ها:

LISTEN * ff02::1        # Listen on all interfaces and to the
                        # ff02::1 IPv6 multicast group.
LISTEN 10.11.12.13      # Listen only on this interface, as long
                        # as no other listen directives appear in
                        # file.

مرجع شماره‌های اختصاص‌یافته اینترنت (IANA) محدوده ff0X:0:0:0:0:0:0:12b را به عنوان محدوده آدرس‌های چندپخشی اختصاص داده شده دائمی برای XDMCP تعیین کرده است. X در پیشوند ممکن است با هر شناسه حوزه معتبری جایگزین شود، مانند 1 برای Interface-Local، 2 برای Link-Local، 5 برای Site-Local و غیره. (برای جزئیات بیشتر و تعاریف حوزه‌ها به IETF RFC 4291 یا جایگزین آن مراجعه کنید.) xdm به طور پیش‌فرض روی آدرس حوزه پیوند محلی (Link-Local) یعنی ff02:0:0:0:0:0:0:12b گوش می‌دهد تا بیشترین تطابق را با رفتار قدیمی برودکست زیرشبکه IPv4 داشته باشد.

منبع DisplayManager.servers یک مشخصه سرور یا اگر مقدار با یک اسلش (/) شروع شود، نام فایلی شامل مشخصات سرورها (هر سطر یک ورودی) را ارائه می‌دهد.

هر مشخصه نشان‌دهنده نمایشگری است که باید به طور مداوم مدیریت شود و از XDMCP استفاده نمی‌کند. این روش معمولاً تنها برای سرورهای محلی استفاده می‌شود. اگر منبع یا فایل مشخص‌شده توسط منبع خالی باشد، xdm تنها سرویس XDMCP را ارائه خواهد داد.

هر مشخصه حداقل از سه بخش تشکیل می‌شود: یک نام نمایشگر، یک کلاس نمایشگر، یک نوع نمایشگر، و (برای سرورهای محلی) یک خط فرمان برای راه‌اندازی سرور. یک ورودی معمول برای نمایشگر محلی شماره 0 به این صورت خواهد بود:

:0 Digital-QV local /usr/bin/X :0
انواع نمایشگرها عبارتند از:
local نمایشگر محلی: xdm باید سرور را اجرا کند
foreign نمایشگر راه دور: xdm یک اتصال X به یک سرور در حال اجرا باز می‌کند

نام نمایشگر باید چیزی باشد که بتوان آن را در گزینه -display به یک برنامه X ارسال کرد. این رشته برای تولید نام‌های منابع مخصوص نمایشگر استفاده می‌شود، بنابراین دقت کنید که نام‌ها مطابقت داشته باشند (مثلاً از «:0 Sun-CG3 local /usr/bin/X :0» به جای «localhost:0 Sun-CG3 local /usr/bin/X :0» استفاده کنید اگر سایر منابع شما به صورت «DisplayManager._0.session» مشخص شده‌اند). بخش کلاس نمایشگر نیز در منابع مخصوص نمایشگر، به عنوان کلاس منبع استفاده می‌شود. این مورد زمانی مفید است که شما مجموعه بزرگی از نمایشگرهای مشابه داشته باشید (مانند مجموعه‌ای از ترمینال‌های X) و بخواهید منابع را برای گروه‌هایی از آن‌ها تنظیم کنید. هنگام استفاده از XDMCP، نمایشگر ملزم به تعیین کلاس نمایشگر است، بنابراین دفترچه راهنمای ترمینال X خاص شما باید رشته کلاس نمایشگر را برای دستگاه شما مستند کرده باشد. اگر چنین نیست، می‌توانید xdm را در حالت اشکال‌زدایی اجرا کرده و رشته‌های منابعی را که برای آن دستگاه تولید می‌کند مشاهده نمایید که شامل رشته کلاس خواهد بود.

هنگامی که xdm یک نشست را آغاز می‌کند، داده‌های مجوزدهی را برای سرور تنظیم می‌نماید. برای سرورهای محلی، xdm گزینه «-auth filename» را در خط فرمان سرور ارسال می‌کند تا آن را به سمت داده‌های مجوزدهی‌اش هدایت نماید. برای سرورهای XDMCP، xdm داده‌های مجوزدهی را از طریق درخواست XDMCP Accept به سرور ارسال می‌کند.

فایل Xresources با استفاده از xrdb به عنوان یک پایگاه داده منابع روی نمایشگر بارگذاری می‌شود. از آنجا که ویجت احراز هویت این پایگاه داده را پیش از شروع به کار می‌خواند، معمولاً شامل پارامترهایی برای آن ویجت است:

        xlogin*login.translations: #override\
                Ctrl<Key>R: abort-display()\n\
                <Key>F1: set-session-argument(failsafe) finish-field()\n\
                <Key>Return: set-session-argument() finish-field()
        xlogin*borderWidth: 3
        xlogin*greeting: CLIENTHOST
        #ifdef COLOR
        xlogin*greetColor: CadetBlue
        xlogin*failColor: red
        #endif

لطفاً به ورودی translations توجه کنید؛ این ورودی چند نگاشت ترجمه جدید را برای ویجت مشخص می‌کند که به کاربران اجازه می‌دهد از نشست پیش‌فرض فرار کنند (و از مشکلاتی که ممکن است در آن رخ دهد اجتناب نمایند). توجه داشته باشید که اگر #override مشخص نشود، نگاشت‌های پیش‌فرض حذف شده و با مقدار جدید جایگزین می‌شوند که نتیجه چندان مفیدی نخواهد بود، زیرا برخی از نگاشت‌های پیش‌فرض کاملاً کاربردی هستند (مانند «<Key>: insert-char ()» که به تایپ عادی پاسخ می‌دهد).

این فایل همچنین ممکن است حاوی منابعی برای برنامه راه‌اندازی و chooser باشد.

فایل Xsetup پس از بازنشانی سرور، اما پیش از ارائه پنجره ورود (Login) اجرا می‌شود. این فایل معمولاً یک اسکریپت شل است. از آنجا که با دسترسی کاربر ریشه (root) اجرا می‌شود، باید مسائل امنیتی در آن بسیار جدی گرفته شود. اینجا مکانی برای تغییر پس‌زمینه ریشه یا بالا آوردن پنجره‌های دیگری است که باید در کنار ویجت ورود روی صفحه ظاهر شوند.

علاوه بر هر موردی که توسط DisplayManager.exportList مشخص شده باشد، متغیرهای محیطی زیر نیز ارسال می‌شوند:

DISPLAY نام نمایشگر مربوطه
PATH مقدار DisplayManager.DISPLAY.systemPath
SHELL مقدار DisplayManager.DISPLAY.systemShell
XAUTHORITY ممکن است روی یک فایل مجوزدهی تنظیم شود

توجه داشته باشید از آنجا که xdm صفحه‌کلید را در انحصار خود می‌گیرد، هیچ پنجره دیگری قادر به دریافت ورودی صفحه‌کلید نخواهد بود. با این حال، آن‌ها قادر به تعامل با ماوس خواهند بود؛ در اینجا مراقب رخنه‌های امنیتی بالقوه باشید. اگر DisplayManager.DISPLAY.grabServer تنظیم شده باشد، Xsetup به هیچ وجه قادر به اتصال به نمایشگر نخواهد بود. منابع مربوط به این برنامه را می‌توان در فایلی قرار داد که توسط DisplayManager.DISPLAY.resources مشخص شده است.

در اینجا یک نمونه اسکریپت Xsetup آورده شده است:

#!/bin/sh
# Xsetup_0 - setup script for one workstation
xcmsdb < /etc/X11/xdm/monitors/alex.0
xconsole -geometry 480x130-0-0 -notify -verbose -exitOnFail &

ویجت احراز هویت نام کاربری، گذرواژه و/یا سایر داده‌های احراز هویت مورد نیاز را از طریق صفحه‌کلید از کاربر درخواست می‌کند. تقریباً هر پارامتر قابل تصوری را می‌توان با یک منبع کنترل کرد. منابع این ویجت باید در فایلی قرار داده شوند که توسط DisplayManager.DISPLAY.resources مشخص شده است. همه این‌ها دارای مقادیر پیش‌فرض مناسبی هستند، بنابراین نیازی به تعیین هیچ یک از آن‌ها نیست.

فایل منابع با xrdb(1) بارگذاری می‌شود، بنابراین ممکن است از جایگزینی‌های تعریف‌شده توسط آن برنامه مانند CLIENTHOST برای نام میزبان کلاینت در پیام ورود، یا دستورات پیش‌پردازنده C مانند #ifdef برای ایجاد نمایشگرهای مختلف بسته به عمق رنگ یا متغیرهای دیگر استفاده کند.

Xdm می‌تواند با پشتیبانی از کتابخانه Xft(3) برای رندر فونت کامپایل شود. اگر این پشتیبانی وجود داشته باشد، صورت فونت‌ها (font faces) با استفاده از منابعی با نام‌های ختم‌شده به «face» در قالب چهره fontconfig مشخص می‌شوند که در بخش Font Names از fonts.conf(5) شرح داده شده است. در غیر این صورت، فونت‌ها با استفاده از منابعی با نام‌های ختم‌شده به «font» در قالب سنتی X Logical Font Description مشخص می‌شوند که در بخش Font Names از X(7) توضیح داده شده است.

هندسه (geometry) ویجت Login معمولاً به طور خودکار محاسبه می‌شود. اگر تمایل دارید آن را در جای دیگری قرار دهید، هر یک از این منابع را مشخص کنید.
رنگ مورد استفاده برای نمایش ورودی تایپ‌شده توسط کاربر.
صورت فونت مورد استفاده برای نمایش ورودی تایپ‌شده توسط کاربر در صورت کامپایل با پشتیبانی از Xft. پیش‌فرض «Serif-18» است.
فونت مورد استفاده برای نمایش ورودی تایپ‌شده توسط کاربر در صورت عدم پشتیبانی از Xft.
رشته‌ای که هویت این پنجره را مشخص می‌کند. پیش‌فرض «X Window System» است.
هنگامی که مجوزدهی X در فایل پیکربندی برای این نمایشگر درخواست شده باشد و هیچ مجوزی در حال استفاده نباشد، این پیام جایگزین پیام خوش‌آمدگویی استاندارد می‌شود. پیش‌فرض «This is an unsecure session» است.
صورت فونت مورد استفاده برای نمایش پیام خوش‌آمدگویی هنگام کامپایل با پشتیبانی از Xft. پیش‌فرض «Serif-24:italic» است.
فونت مورد استفاده برای نمایش پیام خوش‌آمدگویی در صورت عدم پشتیبانی از Xft.
رنگ مورد استفاده برای نمایش پیام خوش‌آمدگویی.
رشته‌ای که برای درخواست نام کاربری نمایش داده می‌شود. Xrdb فاصله‌های خالی انتهای مقادیر منابع را حذف می‌کند؛ بنابراین برای افزودن فاصله در انتهای اعلان (که معمولاً جلوه بهتری دارد)، فاصله‌ها را با خطوط مورب وارونه (backslash) اسکیپ کنید. پیش‌فرض «Login:  » است.
رشته‌ای که برای درخواست گذرواژه نمایش داده می‌شود، هنگامی که از یک سیستم احراز هویت مانند PAM که پیام‌های اعلان مخصوص به خود را ارائه می‌دهد استفاده نشود. پیش‌فرض «Password:  » است.
صورت فونت مورد استفاده برای نمایش اعلان‌ها در صورت ساخت با پشتیبانی از Xft. پیش‌فرض «Serif-18:bold» است.
فونت مورد استفاده برای نمایش اعلان‌ها در صورت عدم پشتیبانی از Xft.
رنگ مورد استفاده برای نمایش اعلان‌ها.
پیامی که هنگام منقضی شدن گذرواژه کاربر نمایش داده می‌شود. پیش‌فرض «Password Change Required» است.
پیامی که هنگام شکست احراز هویت نمایش داده می‌شود، در صورتی که از سیستم احراز هویتی مانند PAM که اعلان‌های خود را دارد استفاده نشود. پیش‌فرض «Login incorrect» است.
صورت فونت مورد استفاده برای نمایش پیام شکست در صورت ساخت با پشتیبانی از Xft. پیش‌فرض «Serif-18:bold» است.
فونت مورد استفاده برای نمایش پیام شکست در صورت عدم پشتیبانی از Xft.
رنگ مورد استفاده برای نمایش پیام شکست.
تعداد ثانیه‌هایی که پیام شکست روی صفحه نمایش داده می‌شود. پیش‌فرض 10 است.
نام یک تصویر پیکسلی در قالب XPM برای نمایش در پنجره خوش‌آمدگویی، در صورت ساخت با پشتیبانی از XPM. پیش‌فرض عدم نمایش هیچ تصویری است.
تعداد پیکسل‌های فاصله میان تصویر لوگو و سایر عناصر پنجره خوش‌آمدگویی، در صورتی که تصویر نمایش داده شود. پیش‌فرض 5 است.
اگر روی «true» تنظیم شود، در صورت ساخت با پشتیبانی از XPM، تلاش می‌کند از افزونه شکل پنجره غیرمستطیلی X برای تنظیم شکل پنجره استفاده کند. پیش‌فرض «true» است.
با تنظیم این منابع می‌توان حاشیه‌های برجسته در اطراف قاب خوش‌آمدگویی و کادرهای ورود متن ترسیم کرد. hiColor رنگ برجسته‌سازی است که در ضلع‌های بالا و چپ قاب و ضلع‌های پایین و راست نواحی ورود متن استفاده می‌شود. shdColor رنگ سایه است که در ضلع‌های پایین و راست قاب و ضلع‌های بالا و چپ نواحی ورود متن به کار می‌رود. پیش‌فرض برای هر دو، رنگ متن پیش‌زمینه (foreground) است که ظاهری تخت و مسطح ایجاد می‌کند.
منبع frameWidth عرض به پیکسل از ناحیه اطراف قاب خوش‌آمدگویی است که با hiColor و shdColor رسم می‌شود.
منبع innerFramesWidth عرض به پیکسل از ناحیه اطراف کادرهای ورود متن است که با hiColor و shdColor رسم می‌شود.
منبع sepWidth عرض به پیکسل از خط حاشیه‌دار میان اعلان خوش‌آمدگویی و نواحی ورودی است که با hiColor و shdColor رسم می‌شود.
اگر روی «false» تنظیم شود، به کاربر ریشه (و هر کاربر دیگری با شناسه کاربری uid = 0) اجازه ورود مستقیم داده نمی‌شود. پیش‌فرض «true» است. این تنظیم در حال حاضر تنها توسط برخی از بک‌اندهای احراز هویت بررسی می‌شود.
اگر روی «true» تنظیم شود، اجازه می‌دهد تا تطبیق گذرواژه‌ای که در غیر این صورت با شکست مواجه می‌شد، در صورتی که حساب کاربری اصلاً نیازی به گذرواژه نداشته باشد، موفقیت‌آمیز باشد. پیش‌فرض «false» است، بنابراین فقط کاربرانی که گذرواژه به آن‌ها اختصاص داده شده است می‌توانند وارد شوند.
اگر روی «true» تنظیم شود، یک نویسه جایگزین (echoPasswdChar) برای فیلدهایی که معمولاً برای بازتاب ندادن متن تنظیم شده‌اند، مانند ورودی گذرواژه، نمایش داده می‌شود. پیش‌فرض «false» است.
نویسه‌ای که در صورت فعال بودن echoPasswd نمایش داده می‌شود. پیش‌فرض «*» است. اگر روی مقدار خالی تنظیم شود، مکان‌نما برای هر نویسه ورودی به جلو حرکت می‌کند، اما متنی رسم نخواهد شد.
این منبع نگاشت‌های ترجمه استفاده‌شده برای ویجت ورود را مشخص می‌کند. برای بحث کامل درباره نگاشت‌ها به مستندات X Toolkit مراجعه کنید. جدول ترجمه پیش‌فرض عبارت است از:
Ctrl<Key>H: delete-previous-character()
Ctrl<Key>D: delete-character()
Ctrl<Key>B: move-backward-character()
Ctrl<Key>F: move-forward-character()
Ctrl<Key>A: move-to-begining()
Ctrl<Key>E: move-to-end()
Ctrl<Key>K: erase-to-end-of-line()
Ctrl<Key>U: erase-line()
Ctrl<Key>X: erase-line()
Ctrl<Key>C: restart-session()
Ctrl<Key>\\: abort-session()
<Key>BackSpace: delete-previous-character()
<Key>Delete: delete-previous-character()
<Key>Return: finish-field()
<Key>: insert-char()

کنش‌هایی (actions) که توسط این ویجت پشتیبانی می‌شوند عبارتند از:

نویسه قبل از مکان‌نما را پاک می‌کند.
نویسه بعد از مکان‌نما را پاک می‌کند.
مکان‌نما را یک نویسه به عقب می‌برد.
مکان‌نما را یک نویسه به جلو می‌برد.
(با پوزش بابت خطای املایی در نام انگلیسی این کنش). مکان‌نما را به ابتدای متن قابل ویرایش می‌برد.
مکان‌نما را به انتهای متن قابل ویرایش می‌برد.
تمام متن بعد از مکان‌نما را پاک می‌کند.
کل متن را پاک می‌کند.
اگر مکان‌نما در فیلد نام کاربری باشد، به فیلد گذرواژه می‌رود؛ اگر مکان‌نما در فیلد گذرواژه باشد، جفت نام کاربری/گذرواژه فعلی را بررسی می‌کند. اگر جفت نام/گذرواژه معتبر باشد، xdm نشست را آغاز می‌کند. در غیر این صورت پیام شکست نمایش داده شده و مجدداً از کاربر ورودی خواسته می‌شود.
سرور را متوقف کرده و مجدداً راه‌اندازی می‌کند.
سرور را متوقف کرده و آن را غیرفعال می‌سازد. این کنش در پیکربندی پیش‌فرض در دسترس نیست. دلایل مختلفی برای متوقف کردن xdm روی یک کنسول سیستم وجود دارد؛ مانند هنگام خاموش کردن سیستم، هنگام استفاده از xdmshell، برای راه‌اندازی نوع دیگری از سرور، یا برای دسترسی عمومی به کنسول. ارسال یک SIGHUP به xdm نمایشگر را مجدداً راه‌اندازی می‌کند. بخش کنترل XDM (CONTROLLING XDM) را ببینید.
سرور X را بازنشانی کرده و یک نشست جدید آغاز می‌کند. این کنش می‌تواند زمانی استفاده شود که منابع تغییر کرده باشند و بخواهید آن‌ها را آزمایش کنید، یا زمانی که صفحه نمایش با پیام‌های سیستمی مخدوش شده باشد.
نویسه تایپ‌شده را درج می‌کند.
یک آرگومان تک‌کلمه‌ای را مشخص می‌کند که در زمان راه‌اندازی به نشست ارسال می‌شود. بخش برنامه نشست (SESSION PROGRAM) را ببینید.
کنترل دسترسی را در سرور غیرفعال می‌کند. این کنش می‌تواند زمانی استفاده شود که فایل .Xauthority نتواند توسط xdm ایجاد شود. در استفاده از این کنش بسیار مراقب باشید؛ شاید بهتر باشد قبل از انجام این کار، دستگاه را از شبکه جدا کنید.

در برخی سیستم‌ها (مانند OpenBSD)، شل کاربر باید در /etc/shells فهرست شده باشد تا اجازه ورود از طریق xdm داده شود. تاریخ‌های معمول انقضای گذرواژه و حساب کاربری نیز اعمال می‌شوند.

برنامه Xstartup با دسترسی کاربر ریشه (root) هنگام ورود کاربر اجرا می‌شود. این برنامه معمولاً یک اسکریپت شل است. از آنجا که با دسترسی root اجرا می‌شود، Xstartup باید ملاحظات امنیتی را به دقت رعایت کند. این برنامه مکانی برای قرار دادن دستوراتی است که ورودی‌هایی به فایل‌های utmp یا wtmp اضافه می‌کنند (برنامه sessreg ممکن است در اینجا مفید باشد)، دایرکتوری‌های خانگی کاربران را از سرورهای فایل سوار (mount) می‌کنند، یا در صورتی که ورودها مجاز نباشند، نشست را لغو می‌نمایند.

علاوه بر هر موردی که توسط DisplayManager.exportList مشخص شده باشد، متغیرهای محیطی زیر نیز ارسال می‌شوند:

DISPLAY نام نمایشگر مربوطه
HOME دایرکتوری کاری اولیه کاربر
LOGNAME نام کاربری
USER نام کاربری
PATH مقدار DisplayManager.DISPLAY.systemPath
SHELL مقدار DisplayManager.DISPLAY.systemShell
XAUTHORITY ممکن است روی یک فایل مجوزدهی تنظیم شود
WINDOWPATH ممکن است روی «مسیر پنجره» منتهی به سرور X تنظیم شود

هیچ آرگومانی به اسکریپت ارسال نمی‌شود. Xdm پیش از آغاز نشست کاربر، تا زمان خروج این اسکریپت منتظر می‌ماند. اگر مقدار خروج این اسکریپت غیرصفر باشد، xdm نشست را متوقف کرده و یک چرخه احراز هویت دیگر را آغاز می‌کند.

نمونه فایل Xstartup نشان‌داده‌شده در اینجا از ورود کاربر تا زمانی که فایل /etc/nologin وجود داشته باشد جلوگیری می‌کند. بنابراین این یک مثال کامل نیست، بلکه صرفاً نمایشی از قابلیت‌های موجود است.

در اینجا یک نمونه اسکریپت Xstartup آورده شده است:

#!/bin/sh
#
# Xstartup
#
# This program is run as root after the user is verified
#
if [ -f /etc/nologin ]; then
	xmessage -file /etc/nologin -timeout 30 -center
	exit 1
fi
sessreg -a -l $DISPLAY -x /etc/X11/xdm/Xservers $LOGNAME
/etc/X11/xdm/GiveConsole
exit 0

برنامه Xsession دستوری است که به عنوان نشست کاربر اجرا می‌شود. این برنامه با مجوزهای دسترسی کاربر احراز هویت شده اجرا می‌گردد.

علاوه بر هر موردی که توسط DisplayManager.exportList مشخص شده باشد، متغیرهای محیطی زیر نیز ارسال می‌شوند:

DISPLAY نام نمایشگر مربوطه
HOME دایرکتوری کاری اولیه کاربر
LOGNAME نام کاربری
USER نام کاربری
PATH مقدار DisplayManager.DISPLAY.userPath
SHELL شل پیش‌فرض کاربر (از getpwnam)
XAUTHORITY ممکن است روی یک فایل مجوز غیراستاندارد تنظیم شود
KRB5CCNAME ممکن است روی نام حافظه پنهان اعتبارنامه‌های کربروس تنظیم شود
WINDOWPATH ممکن است روی «مسیر پنجره» منتهی به سرور X تنظیم شود

در بیشتر سامانه‌ها، Xsession باید در $HOME به دنبال فایلی به نام .xsession بگردد، که شامل دستوراتی است که هر کاربر مایل است به عنوان یک نشست استفاده کند. Xsession همچنین باید در صورتی که هیچ نشستی توسط کاربر مشخص نشده باشد، یک نشست پیش‌فرض سیستمی را اجرا کند.

یک آرگومان ممکن است با استفاده از کنش «set-session-argument» از ویجت احراز هویت به این برنامه ارسال شود. از این قابلیت می‌توان برای انتخاب سبک‌های مختلف نشست استفاده کرد. یکی از کاربردهای مناسب این ویژگی، فراهم ساختن امکان فرار کاربر از نشست عادی در زمان شکست یا خرابی آن است. این کار به کاربران اجازه می‌دهد در صورت بروز مشکل در .xsession خود، آن را بدون نیاز به مداخله مدیر سیستم تعمیر کنند. مثال زیر این ویژگی را نشان می‌دهد.

این مثال حالت ویژه «failsafe» را که در بخش نگاشت‌ها در فایل Xresources مشخص شده است تشخیص می‌دهد تا راه گریزی از نشست عادی فراهم کند. این مثال همچنین نیازمند آن است که فایل .xsession دارای مجوز اجرا (executable) باشد تا مجبور به حدس زدن شل مورد نظر آن نباشیم.

#!/bin/sh
#
# Xsession
#
# This is the program that is run as the client
# for the display manager.
case $# in
1)
	case $1 in
	failsafe)
		exec xterm -geometry 80x24-0-0
		;;
	esac
esac
startup=$HOME/.xsession
resources=$HOME/.Xresources
if [ -f "$startup" ]; then
	exec "$startup"
else
	if [ -f "$resources" ]; then
		xrdb -load "$resources"
	fi
	twm &
	xman -geometry +10-10 &
	exec xterm -geometry 80x24+10+10 -ls
fi

فایل .xsession کاربر ممکن است چیزی شبیه به این مثال باشد. فراموش نکنید که فایل باید دارای مجوز اجرا باشد.

      #! /bin/csh
      # no -f in the previous line so .cshrc gets run to set $PATH
        twm &
        xrdb -merge "$HOME/.Xresources"
        emacs -geometry +0+50 &
        xbiff -geometry -430+5 &
        xterm -geometry -0+50 -ls

به طور متقارن با Xstartup، اسکریپت Xreset پس از پایان یافتن نشست کاربر اجرا می‌شود. این اسکریپت با دسترسی root اجرا می‌گردد و باید شامل دستوراتی باشد که اثرات دستورات موجود در Xstartup را خنثی کنند؛ مانند به‌روزرسانی ورودی‌ها در فایل‌های utmp یا wtmp، یا پیاده کردن دایرکتوری‌ها از سرورهای فایل. همان متغیرهای محیطی که به Xstartup ارسال شده بودند، به Xreset نیز ارسال می‌شوند.

یک نمونه اسکریپت Xreset:

#!/bin/sh
#
# Xreset
#
# This program is run as root after the session ends
#
sessreg -d -l $DISPLAY -x /etc/X11/xdm/Xservers $LOGNAME
/etc/X11/xdm/TakeConsole
exit 0

Xdm سرورهای محلی را با استفاده از سیگنال‌های POSIX کنترل می‌کند. انتظار می‌رود SIGHUP سرور را بازنشانی کند، تمامی اتصالات کلاینت را ببندد و وظایف پاک‌سازی دیگر را انجام دهد. انتظار می‌رود SIGTERM سرور را خاتمه دهد. اگر این سیگنال‌ها اقدامات مورد انتظار را انجام ندهند، منابع DisplayManager.DISPLAY.resetSignal و DisplayManager.DISPLAY.termSignal می‌توانند سیگنال‌های جایگزین را مشخص کنند.

برای کنترل ترمینال‌های راه دوری که از XDMCP استفاده نمی‌کنند، xdm سلسله‌مراتب پنجره‌ها را در صفحه جستجو کرده و از درخواست پروتکل KillClient در تلاشی برای پاک‌سازی ترمینال جهت نشست بعدی استفاده می‌کند. این کار ممکن است عملاً همه کلاینت‌ها را متوقف نکند، زیرا فقط آن‌هایی که پنجره ایجاد کرده‌اند شناسایی خواهند شد. پروتکل XDMCP سازوکار مطمئن‌تری ارائه می‌دهد؛ هنگامی که xdm اتصال اولیه خود را می‌بندد، نشست به پایان رسیده است و ترمینال ملزم است تمام اتصالات دیگر را ببندد.

Xdm به دو سیگنال پاسخ می‌دهد: SIGHUP و SIGTERM. هنگامی که یک SIGHUP ارسال می‌شود، xdm فایل پیکربندی، فایل کنترل دسترسی و فایل سرورها را مجدداً می‌خواند. در مورد فایل سرورها، اضافه یا حذف شدن ورودی‌ها را بررسی می‌کند. اگر ورودی جدیدی اضافه شده باشد، xdm یک نشست روی نمایشگر مربوطه آغاز می‌کند. ورودی‌هایی که حذف شده‌اند بلافاصله غیرفعال می‌شوند؛ به این معنی که هر نشست در حال اجرا بدون اطلاع قبلی خاتمه می‌یابد و هیچ نشست جدیدی آغاز نخواهد شد.

هنگامی که SIGTERM ارسال شود، xdm تمام نشست‌های در حال اجرا را متوقف کرده و خارج می‌شود. این مورد می‌تواند هنگام خاموش کردن سیستم استفاده شود.

Xdm تلاش می‌کند زیرفرآیندهای مختلف خود را برای ps(1) با ویرایش درجا در فهرست آرگومان‌های خط فرمان علامت‌گذاری کند. از آنجا که xdm نمی‌تواند حافظه اضافی برای این کار اختصاص دهد، راه‌اندازی xdm با یک خط فرمان به اندازه کافی طولانی سودمند است (استفاده از نام مسیر کامل باید کافی باشد). هر فرآیندی که در حال ارائه سرویس به یک نمایشگر است با -display مشخص می‌شود.

برای افزودن یک نمایشگر محلی اضافی، یک خط برای آن به فایل Xservers اضافه کنید. (بخش مشخص‌سازی سرور محلی (LOCAL SERVER SPECIFICATION) را ببینید.)

منابع مخصوص نمایشگر را در xdm-config بررسی کنید (به عنوان مثال، DisplayManager._0.authorize) و در نظر بگیرید کدام‌یک از آن‌ها باید برای نمایشگر جدید کپی شوند. فایل پیش‌فرض xdm-config شامل تمام خطوط مناسب برای نمایشگرهای :0 و :1 است.

می‌توانید از xdm برای اجرای همزمان تنها یک نشست با استفاده از گزینه‌های 4.3 init یا سایر دیمن‌های مناسب، با مشخص کردن سرور در خط فرمان استفاده کنید:

xdm -server “:0 SUN-3/60CG4 local /usr/bin/X :0”

یا ممکن است یک سرور فایل و مجموعه‌ای از ترمینال‌های X داشته باشید. پیکربندی برای این حالت با نمونه بالا یکسان است، با این تفاوت که فایل Xservers شبیه به این خواهد بود:

extol:0 VISUAL-19 foreign
exalt:0 NCD-19 foreign
explode:0 NCR-TOWERVIEW3000 foreign

این پیکربندی به xdm دستور می‌دهد تا نشست‌ها را روی هر سه ترمینال مدیریت کند. بخش کنترل XDM (CONTROLLING XDM) را برای شرح استفاده از سیگنال‌ها جهت فعال و غیرفعال کردن این ترمینال‌ها به شیوه‌ای مشابه init(8) مشاهده کنید.

یکی از کارهایی که xdm در انجام آن چندان ماهر نیست، همزیستی با سایر سامانه‌های پنجره‌ای است. برای استفاده از چند سامانه پنجره‌ای روی یک سخت‌افزار یکسان، احتمالاً xinit برای شما جذاب‌تر خواهد بود.

/etc/X11/xdm/xdm-config
فایل پیکربندی پیش‌فرض
$HOME/.Xauthority
فایل مجوزدهی کاربر که در آن xdm کلیدها را برای خواندن کلاینت‌ها ذخیره می‌کند
/usr/lib/X11/xdm/chooser
برنامه انتخاب‌گر پیش‌فرض
/usr/bin/xrdb
لودر پیش‌فرض پایگاه داده منابع
/usr/bin/X
سرور پیش‌فرض
/usr/bin/xterm
برنامه پیش‌فرض نشست و کلاینت حالت اضطراری (failsafe)
/var/lib/xdm/A<display>-<suffix>
محل پیش‌فرض برای فایل‌های مجوزدهی
/tmp/K5C<display>
حافظه پنهان اعتبارنامه‌های کربروس (Kerberos)

X(7), xinit(1), xauth(1), xrdb(1), Xsecurity(7), sessreg(1), Xserver(1), xdmshell(8), fonts.conf(5).
X Display Manager Control Protocol
IETF RFC 4291: IP Version 6 Addressing Architecture.

Keith Packard, MIT X Consortium

xdm 1.1.17 X Version 11