# Insomniac: أبقِ الـ Mac مستيقظًا والغطاء مغلق، دون أن يسخن

> تطبيق macOS في شريط القوائم يبقي الـ Mac مستيقظًا والغطاء مغلق، مبني كغلاف آمن حول أمر نظام مميز، مع قطع حراري مباشر حتى لا يسخن أبدًا.

Canonical URL: https://saifsiddiqui.in/ar/work/insomniac/ (this is its markdown representation; the same URL serves HTML to browsers)
Other languages: en: https://saifsiddiqui.in/work/insomniac/ · hi: https://saifsiddiqui.in/hi/work/insomniac/ · kn: https://saifsiddiqui.in/kn/work/insomniac/ · ur: https://saifsiddiqui.in/ur/work/insomniac/ · te: https://saifsiddiqui.in/te/work/insomniac/ · hi-Latn: https://saifsiddiqui.in/hi-latn/work/insomniac/

**الدور:** بني من الصفر  
**المكدس:** Swift, SwiftUI, macOS, IOKit

**الروابط**

- Web: https://saif-09.github.io/insomniac/

## المشكلة

أردت أن يظل الـ Mac يعمل والغطاء مغلق. ليس معتمًا: يعمل فعلًا، وكيل ذكاء اصطناعي طوال
الليل، أرشفة Xcode، مزامنة طويلة، الغطاء مغلق، دون شاشة خارجية. يسمي macOS ذلك نوم الصدفة،
ولا يهتم بأن مهمتك في منتصفها.

المشكلة في الآلية. تستخدم أدوات إبقاء اليقظة الشائعة تأكيدات طاقة IOKit، وهي لا تمنع نوم
الصدفة إلا إذا كان لديك شاشة خارجية وطاقة ولوحة مفاتيح متصلة، وهو بالضبط الإعداد الذي كنت
أحاول تجنبه. الرافعة الوحيدة التي تعمل دون توصيل أي شيء هي أمر مميز: pmset disablesleep.
لذا فإن المنتج كله هو حقًا شيء واحد، غلاف آمن حول إعداد نظام خطير، وكل شيء آخر موجود لجعل
سحب تلك الرافعة الواحدة آمنًا ولطيفًا.

## القرارات

**الأمان هو الميزة، لا البقاء مستيقظًا.** تطبيق إبقاء يقظة مدفوع عام ميت عند الوصول:
Amphetamine و caffeinate يفعلان ذلك مجانًا بالفعل. الزاوية غير المخدومة كانت الحرارة. الغطاء
المغلق يخنق تدفق الهواء، ولا تقول أي أداة موجودة كلمة عنه. لذا فإن Insomniac ليس "ابقَ
مستيقظًا"، بل "ابقَ مستيقظًا دون طهي الجهاز".

**قِس ما يكشفه macOS بصدق، لا درجات مزيفة.** النسخة المغرية تقرأ درجة حرارة المعالج وتعرض
عدًا تنازليًا بالدرجات. لكن Apple Silicon لا يكشف أي طريقة مدعومة لقراءة درجة حرارة القالب؛
أي شيء يدّعي ذلك يقرأ مفاتيح خاصة تنكسر عبر الموديلات. لذا بنيت على
ProcessInfo.thermalState (nominal, fair, serious, critical)، الذي لا يحتاج إلى مسؤول وهو
مدعوم إلى الأبد. والحماية الحقيقية ليست تنبؤًا مسبقًا على الإطلاق: إنها قطع حراري مباشر
يراقب الحالة والغطاء مغلق ويوقف الجلسة تلقائيًا إذا تصاعدت. التنبؤ قد يكون خاطئًا؛ القطع
المباشر حقيقة أرضية.

**بنية يكون فيها الجزء الخطير قابلًا للاستبدال.** لتشغيل pmset كجذر مساران: موجّه AppleScript
يطلب كلمة مرور عند كل تبديل (بسيط، يعمل في اليوم الأول) ومساعد مميز عبر XPC يبدّل بصمت
(بمستوى الإنتاج، يحتاج توقيعًا وعقدًا مثبتًا). بدلًا من ربط التطبيق بأي منهما، أخفيت كليهما
خلف بروتوكول PowerControlling واحد. شحنت نسخة موجّه كلمة المرور في اليوم الأول وأضفت المساعد
الصامت لاحقًا دون أي تغيير في المستدعي. المساعد مُحكم الإغلاق: كخادم جذر لا يقبل إلا اتصالات
XPC المثبتة بمعرّف هذا التطبيق و Team ID.

**ثوابت الأمان تفرضها الشيفرة.** لتطبيق إبقاء اليقظة فشل كارثي واحد: ترك النوم معطلًا بعد أن
تنتهي. عاملت "لا تترك النوم معطلًا أبدًا" كثابت وأغلقت كل مخرج. إيقاف التبديل، الإيقاف
التلقائي، القطع الحراري، وقطع البطارية كلها تستعيد النوم. الإنهاء وتسجيل الخروج يؤجلان
الإنهاء حتى يكتمل الاستعادة؛ التطبيق يرفض أن يموت والنوم لا يزال معطلًا. لا يمكن اعتراض
انهيار قاسٍ، لذا في الإطلاق التالي يكتشف التطبيق أن النوم معطل دون جلسة نشطة ويعرض إعادة
ضبطه. لا يوجد أيضًا "غير محدد": أطول جلسة حد صارم من 8 ساعات، لأن "إلى الأبد" هو بالضبط
الإعداد الذي يترك حاسوبًا ميتًا وساخنًا في حقيبة.

**واجهة صادقة، خصوصية صادقة.** التطبيق في شريط القوائم فقط. تعرض النصيحة مستوى خطر (low,
moderate, high) ورسالة بسيطة، لا درجات لا أستطيع قراءتها بصدق أبدًا، وتلميح الطقس متعمَّد
كأضعف مدخل: غرفة حارة قد ترفع الخطر، لكن غرفة باردة لا تجعل معالجًا يسخن آمنًا أبدًا. يأتي
موقع الطقس من تحديد الموقع بعنوان IP، على مستوى المدينة، فلا يوجد طلب إذن GPS؛ أطفئ الطقس
ولا يرسل التطبيق شيئًا. لا قياس عن بُعد، لا تحليلات.

**الخلل الذي لم أجده إلا بالعيش مع التطبيق.** أبقى V1 الـ Mac مستيقظًا، لكن الشاشة ظلت
مضيئة والغطاء مغلق، لأن تعطيل النوم يوقف أيضًا macOS عن إطفاء الشاشة الداخلية. إضاءة خلفية
تحترق أمام لوحة المفاتيح هي بطارية وحرارة مهدرة، وهو بالضبط ما يحمي منه التطبيق. أضفت مراقب
غطاء ينطلق عند حافة الانتقال من مفتوح إلى مغلق ويُنيم الشاشة بأمر غير ضار على مستوى المستخدم،
مفصول عمدًا عن المساعد المميز. أقل امتياز للشيء الذي لا يحتاجه.

**اشحن الآن، وتملّك الحافة الخشنة.** تحتاج الميزة الأساسية إلى إيقاف App Sandbox، ما يستبعد
Mac App Store، فشحنت تنزيلًا مباشرًا. بدلًا من قضاء أيام على أوراق Apple أولًا، شحنت نسخة
غير موثّقة الآن وجعلت تحذير Gatekeeper الناتج خطوة موجّهة من دقيقة واحدة: المُثبِّت دليل إعداد
مرسوم يدويًا، وأمر إزالة الحجر موجود بجوار التطبيق مباشرة كملف قابل للنسخ، والتطبيق يزيل علم
الحجر الخاص به عند كل إطلاق حتى لا يعود التحذير أبدًا. يعيد سكربت التغليف التوقيع والتوثيق
بأمر واحد لحظة وجود شهادة.

## النتيجة

{/* TODO(saif): downloads / usage once it is public. Qualitative for now. */}

Insomniac [مباشر](https://saif-09.github.io/insomniac/): تطبيق في شريط القوائم يبقي الـ Mac
مستيقظًا والغطاء مغلق، مع قطع حراري مباشر، وقطع بطارية، واستعادة بعد الانهيار، وتبديل صامت
عبر مساعد موقّع. يرتكز كل شيء على قاعدتين: كن صادقًا (الآلية الحقيقية، مستويات خطر بدلًا من
درجات مزيفة، وإشارة ضعيفة تبقى ضعيفة) واشحن بسرعة مع تملّك الحواف الخشنة بدلًا من إخفائها.
تطبيق إبقاء اليقظة شيء صغير، لكنه يمس إعدادًا قد يضر بالعتاد، فكل اختصار كان سيجعل العرض
أكثر بريقًا كان سيجعل المنتج أقل جدارة بالثقة.

جميع الأعمال: [/ar/work/](/ar/work/)

---

Mohd Saif, Product Engineer. I build solutions, not dead software.
Email: saifmd238@gmail.com · GitHub: https://github.com/Saif-09 · LinkedIn: https://www.linkedin.com/in/mohd-saif-134076141/ · Résumé (PDF): https://saifsiddiqui.in/resume

More for agents:
- [/llms.txt](/llms.txt): short summary of this site
- [/llms-full.txt](/llms-full.txt): the complete text of every page in one fetch
- [/agents.md](/agents.md): when to use this site, and how to query it
- [/sitemap-index.xml](/sitemap-index.xml): every URL, in seven languages
