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

رویدادها، بسته‌هایی هستند که از سوی سرور برای کلاینت فرستاده می‌شوند، این بسته‌ها کلاینت را از رخ دادن رویدادی که ممکن است برای کلاینت جالب توجه باشد، آگاه می‌کنند. برای نمونه، هنگامی که کاربر کلیدی را فشار می‌دهد یا بر روی دکمه‌ای کلیک می‌کند، رویدادی برای کلاینت فرستاده می‌شود. رویدادها تنها برای ورودی گرفتن از کاربر و فعل و انفعالات او نیستند. برای نمونه، هنگامی که زیرپنجره‌ای در یک پنجره ساخته می‌شود، رویدادی برای آگاه کردن کلاینت از این رخداد، برای آن فرستاده می‌شود.
هر رویدادی با یک پنجره در ارتباط است. برای نمونه، اگر کاربر هنگامی که نشانگر ماوس بر روی یک پنجره قرار دارد، روی آن پنجره کلیک کند، رویداد با آن پنجره در ارتباط خواهد بود. بستهٔ رویدادی که برای کلاینت فرستاده می‌شود، شناسه آن پنجره را در بر دارد.
یک کلاینت می‌تواند از سرور بخواهد که رویدادی را برای یک کلاینت دیگر بفرستد؛ کلاینت‌ها از این ویژگی برای برقراری ارتباط با یکدیگر استفاده می‌کنند. برای نمونه، هنگامی که کلاینتی از سرور درخواست می‌کند که متن انتخاب‌شده به‌دست کاربر برایش فرستاده شود، یک چنین رویدادی ساخته می‌شود (ممکن است کاربر متن موجود در پنجره‌ای که متعلق به یک کلاینت دیگر است را انتخاب کرده باشد)؛ این رویداد، برای کلاینتی فرستاده می‌شود که پنجره حاوی متن انتخاب‌شده را اداره می‌کند.
هنگامی که محتویات بخشی از یک پنجره، نابود شده و سپس دوباره نمایان می‌شود، رویدادی به نام Expose برای کلاینت فرستاده می‌شود. محتوای یک پنجره می‌تواند در برخی شرایط نابود شود. برای نمونه اگر یک پنجره، بر روی پنجره دیگری جای بگیرد و همه یا بخشی از آن را بپوشاند، محتوای پنجره پوشیده شده نابود خواهد شد. البته این هنگامی است که سرور انباره پشتیبان برای آن پنجره را نگه‌داری نکرده باشد. سرور تضمین نمی‌کند که حتماً یک انباره پشتیبان نگه‌داری می‌کند، اما تضمین می‌کند که هر گاه نیاز به ترسیم دوباره محتوای یک پنجره بود، رویدادی را برای کلاینت بفرستد.
بسیاری از رویدادها تنها هنگامی برای کلاینت فرستاده می‌شوند که کلاینت از پیش آمادگی خود را برای دریافت آن‌ها اعلام کرده باشد و مایل به دریافت آن رویدادها بوده باشد. دلیل این کار این است که شاید تنها چند گونه رویداد خاص برای برخی از کلاینت‌ها جالب توجه باشد و کلاینت‌ها نخواهند به همه آن‌ها پاسخ دهند. برای نمونه، یک کلاینت ممکن است تنها بخواهد از رویدادهای صفحه‌کلید آگاه شود و علاقه‌ای به رویدادهای ماوس نداشته باشد. با این حال، رویدادهایی هستند که حتی اگر کلاینت از پیش آمادگی خود را برای دریافت آن‌ها نشان نداده باشد، باز هم برای کلاینت فرستاده می‌شوند.
کلاینت‌ها با تنظیم کردن یکی از خصوصیات پنجره، مشخص می‌کنند که علاقه‌مند به دریافت کردن چه رویدادهایی هستند. برای نمونه، برای ترسیم دوباره پنجره‌ای که محتوای آن نابود شده، کلاینت باید رویداد Expose را دریافت و پذیرش کند (این رویداد برای همین کار در نظر گرفته شده و  کلاینت را آگاه می‌کند که محتوای پنجره نیازمند ترسیم دوباره است). با این حال، این رویداد تنها هنگامی برای کلاینت فرستاده می‌شود که کلاینت از پیش اعلام کرده باشد که می‌خواهد آن را دریافت کند. این کار با تنظیم کردن خصوصیت ماسک رویداد پنجره، با یک مقدار مناسب انجام می‌شود.
کلاینت‌های گوناگون می‌توانند رویدادهای مرتبط با یک پنجره یکسان را دریافت کنند. آن‌ها حتی می‌توانند ماسک رویداد آن پنجره را به گونهٔ متفاوتی مقداردهی کنند و بدین گونه، هر کدام رویدادهای گوناگونی را دریافت کنند. برای نمونه، یک کلاینت شاید بخواهد تنها رویدادهای مرتبط با صفحه‌کلیدی که برای یک پنجره رخ می‌دهد را دریافت کند، در حالی که کلاینت دیگر دوست دارد تنها رویدادهای مرتبط با ماوس برای همان پنجره را دریافت کند. این کار برای این شدنی است که سرور برای هر پنجره، ماسک رویداد جداگانه‌ای را به ازای هر کلاینت نگه‌داری می‌کند. با این حال، برخی از رویدادها تنها می‌توانند در هر زمان به‌دست یک کلاینت دریافت شوند و کلاینت‌های دیگر نمی‌توانند همزمان همان رویداد را دریافت کنند. این رویدادها، گزارش‌هایی را دربارهٔ کلیک کردن دکمه‌های ماوس و همچنین تغییرات مرتبط با مدیریت پنجره را می‌فرستند.
برنامه xev رویدادهای مرتبط با یک پنجره را نمایش می‌دهد. دستور xev -id WID همه رویدادهای ممکن برای پنجره‌ای با شناسه WID را دریافت کرده و چاپ می‌کند.