پروتکل اصلی سیستم پنجره اکس
رنگ‌ها

در سطح پروتکل، رنگ‌ها به شکل اعداد صحیح ۳۲ بیتی بدون علامت نمایش می‌یابند که pixelvalue نامیده می‌شوند. عناصر زیر بر روی نمایش رنگ‌ها تأثیر دارند:
عمق رنگ
رنگ‌نگاشت که جدولی است که شدت رنگ‌های آبی، قرمز، سبز در آن مشخص می‌شود.
گونه بصری که مشخص می‌کند چگونه جدول رنگ‌نگاشت باید برای نمایش رنگ‌ها مورد استفاده قرار گیرد.
در ساده‌ترین حالت، رنگ‌نگاشت جدولی است که هر سطر آن حاوی یک سه‌تایی آرجی‌بی است. یک pixelvalue به نام x، نشان‌دهنده رنگی است که در سطر xام جدول قرار گرفته‌است. اگر کلاینت قادر باشد مدخل‌های رنگ‌نگاشت را تغییر دهد، این بازنمایش جدید توسط کلاس بصری PseudoColor نشان داده می‌شود. کلاس StaticColor هم کلاسی مشابه است، اما در این کلاس کلاینت نمی‌تواند مدخل‌های رنگ‌نگاشت را تغییر دهد.
حدود ۶ کلاس بصری وجود دارد که هر کدام از آن‌ها روش متفاوتی را برای نمایش دادن سه‌تایی RGB در یک pixelvalue دارند. PseudoColor و StaticColor دو تا از این کلاس‌ها هستند. GrayScale و StaticGray هم دو تای دیگر هستند فرق آن‌ها در این است که این جدول‌ها فقط میزان شدت رنگ قهوه‌ای را نمایش می‌دهند.
دو کلاس بصری باقی‌مانده با کلاس‌هایی که در بالا معرفی شدند متفاوت هستند، چرا که آن‌ها pixelvalueها را به سه قسمت تقسیم می‌کنند و برای تعیین کردن شدت رنگ‌های آبی، قرمز و سبز، از سه جدول مجزا برای هر کدام استفاده می‌کنند. بر طبق این نحوه نمایش رنگ، یک pixelvalue به صورت زیر به یک سه‌تایی RGB تبدیل می‌شود:
pixelvalue به صورت دنباله‌ای از بیت‌ها در نظر گرفته می‌شود.
این دنباله به سه دسته تقسیم می‌شود.
هر کدام از این سه دسته بیت، به صورت یک عدد صحیح درمی‌آید و سپس از این عدد صحیح به عنوان یک اندیس، برای پیدا کردن یک مقدار در یکی از آن سه جدول مجزا، مورد استفاده قرار می‌گیرد.
این سازوکار نیازمند آن است که رنگ‌نگاشت از سه جدول مجزا تشکیل شده باشد و به ازای هر رنگ اولیه، یک جدول مجزا وجود داشته باشد. نتیجه این تبدیل، همچنان یک سه‌تایی از مقادیری است که مشخص‌کننده شدت رنگ‌ها هستند. کلاس‌های بصری که برای نمایش این تبدیل جدید استفاده می‌شود DirectColor و TrueColor هستند و فرق آن‌ها در این است که آیا کلاینت می‌تواند رنگ‌نگاشت‌ها را تغییر دهد یا خیر.
این شش سازوکار برای نمایش رنگ‌ها به وسیلهٔ pixelvalueها، همگی نیازمند پارامترهای بیشتری هستند تا بتوانند کار کنند. این پارامترها در یک گونه بصری گردآوری می‌شوند. یک گونه بصری، حاوی یک کلاس بصری و دیگر پارامترهای مورد نیاز برای نمایش رنگ‌هاست. هر سرور یک دسته ثابت از گونه‌های بصری دارد که هر کدام شناسه عددی مخصوص به خود را دارند. این شناسه‌ها اعداد صحیح ۳۲ بیتی بدون علامت هستند، اما الزاماً متفاوت با شناسه منابع یا اتم‌های (بعدا تشریح می‌شود) دیگر نیستند و ممکن است با آن‌ها همپوشانی داشته باشند.
وقتی که اتصال یک کلاینت توسط سرور پذیرفته می‌شود، بسته پذیرشی که از طرف سرور برای کلاینت ارسال می‌شود حاوی دنباله‌ای از بلاک‌هاست که هر کدام از این بلاک‌ها، حاوی اطلاعاتی دربارهٔ یک صفحه‌نمایش هستند. بلاک متناظر با هر صفحه‌نمایش، حاوی فهرستی از بلاک‌های دیگر است که هر کدام از این بلاک‌ها، مربوط به عمق رنگ خاصی است که توسط آن صفحه‌نمایش پشتیبانی می‌شود. این فهرست، به ازای هر یک از عمق رنگ‌های مورد پشتیبانی، حاوی فهرستی از گونه‌های بصری است. در نتیجه، هر صفحه نمایش تعدادی عمق رنگ دارد که هر کدام از این عمق رنگ‌ها، دارای چند گونه بصری هستند. هر گونه بصری را می‌توان برای چندین صفحه‌نمایش با عمق‌های مختلف مورد استفاده قرار داد.
بسته پذیرش به ازای هر گونه بصری، هم حاوی شناسه آن گونه بصری هست و هم حاوی پارامترهای واقعی که در آن گونه بصری وجود دارد (کلاس بصری و موارد دیگر). کلاینت‌ها این اطلاعات را در خود ذخیره می‌کنند، چرا که بعداً نمی‌توانند آن‌ها را درخواست دهد. علاوه بر آن، کلاینت‌ها نمی‌توانند گونه‌های بصری را تغییر داده یا گونه‌های بصری جدید ایجاد کنند. درخواستی که برای ایجاد کردن یک پنجره جدید برای سرور ارسال می‌شود، حاوی عمق و شناسه گونه بصری‌ای است که باید برای نمایش دادن رنگ‌ها در آن پنجره، مورد استفاده قرار گیرد.
رنگ‌نگاشت‌ها بدون توجه به اینکه سخت‌افزاری که صفحه نمایش را کنترل می‌کند (همانند کارت گرافیک) از یک پالت استفاده می‌کند یا نه، بکار برده می‌شوند. پالت هم جدولی است که برای نمایش دادن رنگ‌ها بکار برده می‌شود. حتی اگر سخت‌افزار از یک پالت استفاده نکند، سرورهاباز هم از رنگ‌نگاشت‌ها استفاده می‌کنند. هنگامی که سخت‌افزار از پالت بهره می‌برد، می‌توان تنها شمار محدودی از رنگ‌نگاشت‌ها را بکار گرفت. یک رنگ‌نگاشت هنگامی به کار گرفته می‌شود که سخت‌افزار بر طبق آن رنگ‌ها را نشان می‌دهد. یک کلاینت می‌تواند از سرور بخواهد که یک رنگ‌نگاشت را بکار بگیرد. با این حال، این کار ممکن است نیازمند از کار انداختن رنگ‌نگاشت دیگری باشد. این کار باعث می‌شود پنجره‌هایی که از آن رنگ‌نگاشت از کار انداخته شده‌استفاده می‌کنند، با رنگ‌های مناسب خود نمایش نیابند که به این پدیده color flashing یا technicolor می‌گویند. این مشکل می‌تواند با استفاده از رنگ‌نگاشت‌های استاندارد رفع شود. رنگ‌نگاشت‌های استاندارد، رنگ‌نگاشت‌هایی هستند که در آن‌ها رابطه‌ای از پیش‌تعیین‌شده بین pixelvalueها و رنگ‌ها وجود دارد. به لطف این خصیصه رنگ‌نگاشت‌های استاندارد، برنامه‌های مختلف می‌توانند آن‌ها را بکار گیرند.
به‌وجود آوردن رنگ‌نگاشت‌ها در قرارداد ICCCM بحث شده‌است. رنگ‌نگاشت‌های استاندارد توسط ICCCM و اکس‌لیب تنظیم می‌شوند.