برمجة نظام مراقبة الاستخدام لـ Windows وmacOS وLinux مع الإغلاق التلقائي

في عالم التكنولوجيا الحديث، أصبح من المهم جداً مراقبة وتنظيم استخدام الأجهزة، خاصة للأطفال أو في البيئات المكتبية. هذا المقال يشرح كيفية بناء نظام مراقبة متقدم باستخدام Python يتميز بالكفاءة والأداء العالي.

الفوائد الرئيسية لنظام مراقبة الاستخدام

1. الرقابة الأبوية الذكية

2. إدارة الموارد في بيئة العمل

3. الأمان والحماية

شرح الكود خطوة بخطوة

الخطوة الأولى: استيراد المكتبات اللازمة

import time
import os
import json
from datetime import datetime
import signal
import sys
import threading

الشرح:

الخطوة الثانية: إنشاء فئة النظام الرئيسية

class UsageTracker:
    def __init__(self, file_path='usage.json', limit_seconds=3600, save_interval=30):
        self.file_path = file_path
        self.limit_seconds = limit_seconds
        self.save_interval = save_interval
        self.data = self.load_data()
        self.running = True
        self.last_save = time.time()

الشرح:

الخطوة الثالثة: تحميل البيانات المحفوظة

def load_data(self):
    """Load usage data with error handling"""
    try:
        if os.path.exists(self.file_path):
            with open(self.file_path, 'r') as f:
                data = json.load(f)
                # Validate data structure
                if not isinstance(data, dict) or 'date' not in data or 'used' not in data:
                    return self.create_default_data()
                return data
    except (json.JSONDecodeError, IOError, OSError):
        pass
    return self.create_default_data()

الشرح:

الخطوة الرابعة: حفظ البيانات بطريقة آمنة

def save_data(self):
    """Save data with atomic write and error handling"""
    try:
        temp_file = self.file_path + '.tmp'
        with open(temp_file, 'w') as f:
            json.dump(self.data, f, separators=(',', ':'))
        
        # Atomic rename on most systems
        if os.name == 'nt':  # Windows
            if os.path.exists(self.file_path):
                os.remove(self.file_path)
        os.rename(temp_file, self.file_path)
        
    except (IOError, OSError) as e:
        print(f"Warning: Could not save usage data: {e}")

الشرح:

الخطوة الخامسة: فحص تغيير التاريخ

def check_date_reset(self):
    """Check if date changed and reset if needed"""
    current_date = datetime.now().date().isoformat()
    if self.data["date"] != current_date:
        self.data["date"] = current_date
        self.data["used"] = 0
        self.save_data()
        return True
    return False

الشرح:

الخطوة السادسة: إغلاق النظام

def shutdown_system(self):
    """Cross-platform shutdown command"""
    self.save_data()
    try:
        if os.name == 'nt':  # Windows
            os.system("shutdown /s /f /t 1")
        else:  # Unix-like systems
            os.system("sudo shutdown -h +1")
    except Exception as e:
        print(f"Shutdown failed: {e}")
        sys.exit(1)

الشرح:

الخطوة السابعة: الحلقة الرئيسية للمراقبة

def run(self):
    """Main tracking loop with optimizations"""
    self.check_date_reset()
    
    # Check if already at limit
    if self.should_shutdown():
        print("Usage limit already reached. Shutting down...")
        self.shutdown_system()
        return
    
    print(f"Usage tracker started. Limit: {self.limit_seconds}s, Current: {self.data['used']}s")
    
    start_time = time.time()
    
    while self.running:
        current_time = time.time()
        elapsed = current_time - start_time
        
        # Update usage based on actual elapsed time
        self.data["used"] = int(self.data["used"] + elapsed)
        start_time = current_time
        
        # Save periodically instead of every second
        if current_time - self.last_save >= self.save_interval:
            self.save_data()
            self.last_save = current_time
            print(f"Usage: {self.data['used']}s / {self.limit_seconds}s")
        
        # Check shutdown condition
        if self.should_shutdown():
            print("Usage limit reached. Shutting down...")
            self.shutdown_system()
            break
        
        # Sleep for shorter intervals for better responsiveness
        time.sleep(5)
    
    # Final save
    self.save_data()

الشرح:

المزايا التقنية للنظام

1. الأداء

2. الموثوقية

3. قابلية التخصيص

كيفية الاستخدام

  1. تشغيل النظام:
python usage_tracker.py
  1. إيقاف النظام يدوياً:
Ctrl+C
  1. تخصيص الإعدادات:
# تغيير الحد الأقصى إلى ساعتين (7200 ثانية)
tracker = UsageTracker(limit_seconds=7200)

# تغيير فترة الحفظ إلى دقيقة واحدة
tracker = UsageTracker(save_interval=60)

كيفية إخفاء النظام

لزيادة فعالية النظام، خاصة في بيئات الرقابة الأبوية أو إدارة الموارد، يمكن إخفاء النظام ليعمل في الخلفية دون أن يلاحظه المستخدم.

1. التشغيل في الخلفية على Windows

الطريقة الأولى: استخدام pythonw

pythonw usage_tracker.py

الطريقة الثانية: إنشاء ملف .bat

@echo off
cd /d "C:\path\to\your\script"
pythonw usage_tracker.py

الطريقة الثالثة: استخدام Task Scheduler

  1. افتح Task Scheduler من قائمة Start
  2. اضغط على “Create Basic Task”
  3. اختر “When the computer starts”
  4. حدد البرنامج: pythonw.exe
  5. أضف المسار: C:\path\to\usage_tracker.py

2. التشغيل في الخلفية على macOS/Linux

الطريقة الأولى: استخدام nohup

nohup python3 usage_tracker.py &

الطريقة الثانية: إنشاء systemd service (Linux)

# /etc/systemd/system/usage-tracker.service
[Unit]
Description=Usage Tracker Service
After=network.target

[Service]
Type=simple
User=your_username
WorkingDirectory=/path/to/script
ExecStart=/usr/bin/python3 /path/to/usage_tracker.py
Restart=always

[Install]
WantedBy=multi-user.target

ثم تفعيل الخدمة:

sudo systemctl enable usage-tracker.service
sudo systemctl start usage-tracker.service

3. إخفاء الملفات والعمليات

إخفاء الملفات:

# إضافة هذا الكود لإخفاء الملفات على Windows
import os
import subprocess

def hide_file(file_path):
    if os.name == 'nt':  # Windows
        subprocess.run(['attrib', '+h', file_path], shell=True)
    else:  # Unix-like systems
        # في Linux/macOS، الملفات التي تبدأ بـ . مخفية
        hidden_path = os.path.dirname(file_path) + '/.' + os.path.basename(file_path)
        os.rename(file_path, hidden_path)
        return hidden_path
    return file_path

# استخدام الدالة
hidden_file = hide_file('usage.json')

إخفاء العملية من Task Manager:

# إضافة هذا الكود لتغيير اسم العملية
import sys
import os

def hide_process():
    if os.name == 'nt':  # Windows
        import ctypes
        # تغيير عنوان النافذة
        ctypes.windll.kernel32.SetConsoleTitleW("System Process")
    else:
        # في Linux، يمكن استخدام prctl لتغيير اسم العملية
        try:
            import prctl
            prctl.set_name("system-monitor")
        except ImportError:
            pass

# استدعاء الدالة في بداية البرنامج
hide_process()

4. التشغيل التلقائي عند بدء التشغيل

على Windows:

import os
import shutil

def add_to_startup():
    if os.name == 'nt':
        startup_folder = os.path.join(os.environ['APPDATA'], 
                                    'Microsoft\\Windows\\Start Menu\\Programs\\Startup')
        script_path = os.path.abspath(__file__)
        
        # إنشاء ملف .bat للتشغيل المخفي
        bat_content = f'''@echo off
cd /d "{os.path.dirname(script_path)}"
pythonw "{script_path}"
'''
        bat_path = os.path.join(startup_folder, 'system_monitor.bat')
        with open(bat_path, 'w') as f:
            f.write(bat_content)

على macOS:

import os
import plistlib

def add_to_startup_mac():
    plist_content = {
        'Label': 'com.system.monitor',
        'ProgramArguments': ['/usr/bin/python3', os.path.abspath(__file__)],
        'RunAtLoad': True,
        'KeepAlive': True,
        'StandardErrorPath': '/tmp/system_monitor.err',
        'StandardOutPath': '/tmp/system_monitor.out'
    }
    
    plist_path = os.path.expanduser('~/Library/LaunchAgents/com.system.monitor.plist')
    with open(plist_path, 'wb') as f:
        plistlib.dump(plist_content, f)
    
    # تحميل الخدمة
    os.system(f'launchctl load {plist_path}')

5. الحماية من الإزالة

import os
import stat

def protect_file(file_path):
    """حماية الملف من الحذف أو التعديل"""
    if os.name == 'nt':  # Windows
        # جعل الملف للقراءة فقط ومخفي
        os.system(f'attrib +R +H +S "{file_path}"')
    else:  # Unix-like systems
        # إزالة صلاحيات الكتابة
        os.chmod(file_path, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)

def self_protect():
    """حماية ملف البرنامج نفسه"""
    script_path = os.path.abspath(__file__)
    protect_file(script_path)
    
    # حماية ملف البيانات
    protect_file('usage.json')

6. مراقبة محاولات الإيقاف

import psutil
import time

def monitor_process_termination():
    """مراقبة محاولات إنهاء العملية"""
    current_pid = os.getpid()
    
    def restart_if_killed():
        while True:
            try:
                # التحقق من وجود العملية
                if not psutil.pid_exists(current_pid):
                    # إعادة تشغيل البرنامج
                    os.system(f'pythonw "{os.path.abspath(__file__)}"')
                    break
                time.sleep(10)
            except:
                break
    
    # تشغيل المراقب في خيط منفصل
    import threading
    monitor_thread = threading.Thread(target=restart_if_killed, daemon=True)
    monitor_thread.start()

تحذيرات مهمة:

⚠️ استخدم هذه الطرق بمسؤولية:

مثال كامل للنظام المخفي:

def create_hidden_system():
    """إنشاء نظام مخفي كامل"""
    # إخفاء العملية
    hide_process()
    
    # حماية الملفات
    self_protect()
    
    # إضافة للتشغيل التلقائي
    add_to_startup()
    
    # مراقبة محاولات الإيقاف
    monitor_process_termination()
    
    # بدء النظام
    tracker = UsageTracker('.system_usage.json')  # ملف مخفي
    tracker.run()

الخلاصة

هذا النظام يوفر حلاً متكاملاً لمراقبة الاستخدام بكفاءة عالية وموثوقية ممتازة. يمكن استخدامه في البيوت للرقابة الأبوية، أو في المكاتب لإدارة الموارد، أو في أي بيئة تتطلب تنظيم وقت الاستخدام.

المميزات الرئيسية تشمل الأداء المحسن، الحفظ الآمن للبيانات، والتوافق مع أنظمة تشغيل متعددة، مما يجعله خياراً مثالياً للاستخدام في بيئات مختلفة.

البرمجة بايثون مراقبة النظام الإغلاق التلقائي

شارك المقال

أحدث المقالات

CONNECTED
ONLINE: ...
SECURE
00:00:00