Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import subprocess
- import shlex
- import time
- import psutil
- import select
- import struct
- import fcntl
- # Функция для выполнения внешних команд
- def run_command(command):
- try:
- result = subprocess.run(shlex.split(command), check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- print(f"Команда выполнена успешно: {command}")
- return result.stdout.decode().strip()
- except subprocess.CalledProcessError as e:
- print(f"Ошибка выполнения команды: {command}, Ошибка: {e.stderr.decode().strip()}")
- return None
- # Функция для проверки активности мыши с корректным таймаутом
- def is_mouse_active(mouse_device, timeout=10):
- if not mouse_device or not os.path.exists(mouse_device):
- print("Устройство мыши недоступно.")
- return False
- try:
- with open(mouse_device, "rb") as f:
- start_time = time.time()
- remaining = timeout
- while remaining > 0:
- ready_to_read, _, _ = select.select([f], [], [], remaining)
- if ready_to_read:
- data = f.read(16)
- if data:
- print("Обнаружено событие мыши.")
- return True
- remaining = max(0, timeout - (time.time() - start_time))
- print("Активность мыши не обнаружена.")
- return False
- except Exception as e:
- print(f"Ошибка при чтении событий мыши: {e}")
- return False
- # Функция для проверки активности клавиатуры с корректным таймаутом
- def is_keyboard_active(keyboard_device, timeout=10):
- if not keyboard_device or not os.path.exists(keyboard_device):
- print("Устройство клавиатуры недоступно.")
- return False
- try:
- with open(keyboard_device, "rb") as f:
- start_time = time.time()
- remaining = timeout
- while remaining > 0:
- ready_to_read, _, _ = select.select([f], [], [], remaining)
- if ready_to_read:
- data = f.read(16)
- if data:
- print("Обнаружено событие клавиатуры.")
- return True
- remaining = max(0, timeout - (time.time() - start_time))
- print("Активность клавиатуры не обнаружена.")
- return False
- except Exception as e:
- print(f"Ошибка при чтении событий клавиатуры: {e}")
- return False
- # Функция для проверки работы mpv
- def is_mpv_running():
- for proc in psutil.process_iter(['pid', 'name']):
- if proc.info['name'] == "mpv":
- print("Процесс mpv обнаружен.")
- return True
- print("Процесс mpv не обнаружен.")
- return False
- # Функция для установки яркости экрана
- def set_screen_brightness(level):
- try:
- result = subprocess.run(["xbacklight", "-set", str(level)], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- print(f"Яркость успешно установлена на {level}%")
- except subprocess.CalledProcessError as e:
- print(f"Ошибка при установке яркости: {e.stderr.decode().strip()}")
- # Путь к файлу сигнала
- signal_file = '/tmp/signalS'
- sensor_file = '/tmp/mySensors'
- script_path = '/home/diver/Скрипты/sensors.sh'
- # Если файл сигнала существует, удаляем его и завершаем работу
- if os.path.isfile(signal_file):
- os.remove(signal_file)
- print("Файл сигнала удален. Завершение работы.")
- exit()
- # Создаем файл сигнала
- open(signal_file, "w").close()
- print("Файл сигнала создан.")
- # Жестко заданные устройства
- mouse_device = "/dev/input/event11"
- keyboard_device = "/dev/input/event4"
- if not os.path.exists(mouse_device):
- print("Мышь не найдена!")
- exit()
- if not os.path.exists(keyboard_device):
- print("Клавиатура не найдена!")
- exit()
- # Основные параметры
- last_frequency = None # Для отслеживания текущей частоты
- last_brightness = None # Для отслеживания текущей яркости
- idle_timeout = 30 # 5 минут без активности
- # Основной цикл
- while os.path.isfile(signal_file):
- print("\n--- Начало новой итерации ---")
- # Проверяем активность
- mouse_active = is_mouse_active(mouse_device)
- keyboard_active = is_keyboard_active(keyboard_device)
- mpv_active = is_mpv_running()
- print(f"Статус активности: Мыши={mouse_active}, Клавиатуры={keyboard_active}, MPV={mpv_active}")
- # Режим сна
- if not (mouse_active or keyboard_active or mpv_active):
- idle_start_time = time.time()
- remaining = idle_timeout
- while remaining > 0:
- if is_mouse_active(mouse_device) or is_keyboard_active(keyboard_device) or is_mpv_running():
- print("Обнаружена активность во время ожидания сна.")
- break
- time.sleep(1)
- remaining = max(0, idle_timeout - (time.time() - idle_start_time))
- else: # Если прошло 5 минут без активности
- print("Активность не обнаружена. Активация режима сна.")
- run_command('cpupower frequency-set -g powersave -d 800MHz -u 800MHz')
- set_screen_brightness(0) # Снижаем яркость до 0
- time.sleep(60) # Ждем некоторое время в режиме сна
- # После сна проверяем активность снова
- if is_mouse_active(mouse_device) or is_keyboard_active(keyboard_device) or is_mpv_running():
- print("Обнаружена активность после сна. Возвращаемся в игровой режим.")
- continue
- # Игровой режим
- if mouse_active or keyboard_active or mpv_active:
- # Проверяем температуру
- run_command(f'env DISPLAY=:0 sh {script_path}')
- try:
- with open(sensor_file, 'r') as file:
- temperature = float(file.readline().strip())
- print(f"Текущая температура: {temperature}°C")
- except (FileNotFoundError, ValueError) as e:
- print(f"Ошибка чтения файла датчиков: {e}")
- time.sleep(1)
- continue
- # Устанавливаем частоту на основе температуры
- if temperature >= 60:
- target_frequency = "800MHz"
- cpupower_command = 'cpupower frequency-set -g powersave -d 800MHz -u 800MHz'
- else:
- target_frequency = "4.0GHz"
- cpupower_command = 'cpupower frequency-set -g powersave -d 800MHz -u 4.0GHz'
- if target_frequency != last_frequency:
- run_command(cpupower_command)
- last_frequency = target_frequency
- # Управление яркостью
- try:
- current_brightness = float(subprocess.check_output(["xbacklight", "-get"]).decode().strip())
- print(f"Текущая яркость: {current_brightness}%")
- if current_brightness <= 25: # Если яркость не повышена вручную2
- set_screen_brightness(25) # Устанавливаем яркость 25%
- last_brightness = 25
- except Exception as e:
- print(f"Ошибка при получении текущей яркости: {e}")
- # Ждем перед следующей итерацией
- print("Ожидание следующей итерации...")
- time.sleep(1)
- # Если файл сигнала удален, завершаем работу
- print("Файл сигнала удален. Завершение работы.")
Add Comment
Please, Sign In to add comment