Guest User

Untitled

a guest
Jun 26th, 2025
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.55 KB | None | 0 0
  1. import os
  2. import subprocess
  3. import shlex
  4. import time
  5. import psutil
  6. import select
  7. import struct
  8. import fcntl
  9.  
  10. # Функция для выполнения внешних команд
  11. def run_command(command):
  12.     try:
  13.         result = subprocess.run(shlex.split(command), check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  14.         print(f"Команда выполнена успешно: {command}")
  15.         return result.stdout.decode().strip()
  16.     except subprocess.CalledProcessError as e:
  17.         print(f"Ошибка выполнения команды: {command}, Ошибка: {e.stderr.decode().strip()}")
  18.         return None
  19.  
  20. # Функция для проверки активности мыши с корректным таймаутом
  21. def is_mouse_active(mouse_device, timeout=10):
  22.     if not mouse_device or not os.path.exists(mouse_device):
  23.         print("Устройство мыши недоступно.")
  24.         return False
  25.     try:
  26.         with open(mouse_device, "rb") as f:
  27.             start_time = time.time()
  28.             remaining = timeout
  29.             while remaining > 0:
  30.                 ready_to_read, _, _ = select.select([f], [], [], remaining)
  31.                 if ready_to_read:
  32.                     data = f.read(16)
  33.                     if data:
  34.                         print("Обнаружено событие мыши.")
  35.                         return True
  36.                 remaining = max(0, timeout - (time.time() - start_time))
  37.         print("Активность мыши не обнаружена.")
  38.         return False
  39.     except Exception as e:
  40.         print(f"Ошибка при чтении событий мыши: {e}")
  41.         return False
  42.  
  43. # Функция для проверки активности клавиатуры с корректным таймаутом
  44. def is_keyboard_active(keyboard_device, timeout=10):
  45.     if not keyboard_device or not os.path.exists(keyboard_device):
  46.         print("Устройство клавиатуры недоступно.")
  47.         return False
  48.     try:
  49.         with open(keyboard_device, "rb") as f:
  50.             start_time = time.time()
  51.             remaining = timeout
  52.             while remaining > 0:
  53.                 ready_to_read, _, _ = select.select([f], [], [], remaining)
  54.                 if ready_to_read:
  55.                     data = f.read(16)
  56.                     if data:
  57.                         print("Обнаружено событие клавиатуры.")
  58.                         return True
  59.                 remaining = max(0, timeout - (time.time() - start_time))
  60.         print("Активность клавиатуры не обнаружена.")
  61.         return False
  62.     except Exception as e:
  63.         print(f"Ошибка при чтении событий клавиатуры: {e}")
  64.         return False
  65.  
  66. # Функция для проверки работы mpv
  67. def is_mpv_running():
  68.     for proc in psutil.process_iter(['pid', 'name']):
  69.         if proc.info['name'] == "mpv":
  70.             print("Процесс mpv обнаружен.")
  71.             return True
  72.     print("Процесс mpv не обнаружен.")
  73.     return False
  74.  
  75. # Функция для установки яркости экрана
  76. def set_screen_brightness(level):
  77.     try:
  78.         result = subprocess.run(["xbacklight", "-set", str(level)], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  79.         print(f"Яркость успешно установлена на {level}%")
  80.     except subprocess.CalledProcessError as e:
  81.         print(f"Ошибка при установке яркости: {e.stderr.decode().strip()}")
  82.  
  83. # Путь к файлу сигнала
  84. signal_file = '/tmp/signalS'
  85. sensor_file = '/tmp/mySensors'
  86. script_path = '/home/diver/Скрипты/sensors.sh'
  87.  
  88. # Если файл сигнала существует, удаляем его и завершаем работу
  89. if os.path.isfile(signal_file):
  90.     os.remove(signal_file)
  91.     print("Файл сигнала удален. Завершение работы.")
  92.     exit()
  93.  
  94. # Создаем файл сигнала
  95. open(signal_file, "w").close()
  96. print("Файл сигнала создан.")
  97.  
  98. # Жестко заданные устройства
  99. mouse_device = "/dev/input/event11"
  100. keyboard_device = "/dev/input/event4"
  101.  
  102. if not os.path.exists(mouse_device):
  103.     print("Мышь не найдена!")
  104.     exit()
  105. if not os.path.exists(keyboard_device):
  106.     print("Клавиатура не найдена!")
  107.     exit()
  108.  
  109. # Основные параметры
  110. last_frequency = None  # Для отслеживания текущей частоты
  111. last_brightness = None  # Для отслеживания текущей яркости
  112. idle_timeout = 30  # 5 минут без активности
  113.  
  114. # Основной цикл
  115. while os.path.isfile(signal_file):
  116.     print("\n--- Начало новой итерации ---")
  117.     # Проверяем активность
  118.     mouse_active = is_mouse_active(mouse_device)
  119.     keyboard_active = is_keyboard_active(keyboard_device)
  120.     mpv_active = is_mpv_running()
  121.     print(f"Статус активности: Мыши={mouse_active}, Клавиатуры={keyboard_active}, MPV={mpv_active}")
  122.  
  123.     # Режим сна
  124.     if not (mouse_active or keyboard_active or mpv_active):
  125.         idle_start_time = time.time()
  126.         remaining = idle_timeout
  127.         while remaining > 0:
  128.             if is_mouse_active(mouse_device) or is_keyboard_active(keyboard_device) or is_mpv_running():
  129.                 print("Обнаружена активность во время ожидания сна.")
  130.                 break
  131.             time.sleep(1)
  132.             remaining = max(0, idle_timeout - (time.time() - idle_start_time))
  133.         else:  # Если прошло 5 минут без активности
  134.             print("Активность не обнаружена. Активация режима сна.")
  135.             run_command('cpupower frequency-set -g powersave -d 800MHz -u 800MHz')
  136.             set_screen_brightness(0)  # Снижаем яркость до 0
  137.             time.sleep(60)  # Ждем некоторое время в режиме сна
  138.             # После сна проверяем активность снова
  139.             if is_mouse_active(mouse_device) or is_keyboard_active(keyboard_device) or is_mpv_running():
  140.                 print("Обнаружена активность после сна. Возвращаемся в игровой режим.")
  141.                 continue
  142.  
  143.     # Игровой режим
  144.     if mouse_active or keyboard_active or mpv_active:
  145.         # Проверяем температуру
  146.         run_command(f'env DISPLAY=:0 sh {script_path}')
  147.         try:
  148.             with open(sensor_file, 'r') as file:
  149.                 temperature = float(file.readline().strip())
  150.             print(f"Текущая температура: {temperature}°C")
  151.         except (FileNotFoundError, ValueError) as e:
  152.             print(f"Ошибка чтения файла датчиков: {e}")
  153.             time.sleep(1)
  154.             continue
  155.  
  156.         # Устанавливаем частоту на основе температуры
  157.         if temperature >= 60:
  158.             target_frequency = "800MHz"
  159.             cpupower_command = 'cpupower frequency-set -g powersave -d 800MHz -u 800MHz'
  160.         else:
  161.             target_frequency = "4.0GHz"
  162.             cpupower_command = 'cpupower frequency-set -g powersave -d 800MHz -u 4.0GHz'
  163.         if target_frequency != last_frequency:
  164.             run_command(cpupower_command)
  165.             last_frequency = target_frequency
  166.  
  167.         # Управление яркостью
  168.         try:
  169.             current_brightness = float(subprocess.check_output(["xbacklight", "-get"]).decode().strip())
  170.             print(f"Текущая яркость: {current_brightness}%")
  171.             if current_brightness <= 25:  # Если яркость не повышена вручную2
  172.                 set_screen_brightness(25)  # Устанавливаем яркость 25%
  173.                 last_brightness = 25
  174.         except Exception as e:
  175.             print(f"Ошибка при получении текущей яркости: {e}")
  176.  
  177.     # Ждем перед следующей итерацией
  178.     print("Ожидание следующей итерации...")
  179.     time.sleep(1)
  180.  
  181. # Если файл сигнала удален, завершаем работу
  182. print("Файл сигнала удален. Завершение работы.")
Add Comment
Please, Sign In to add comment