树莓派CM4显示测序合集
HDMI 屏幕旋转
#!/usr/bin/env python3
# -*- coding: utf-8 -*-import subprocess
import time
import os
import logging
from pathlib import Path# 配置日志
logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s',handlers=[logging.FileHandler('/home/pi/rotate_screen.log'),logging.StreamHandler()]
)def set_environment():"""设置正确的环境变量"""# 设置 DISPLAY 环境变量os.environ['DISPLAY'] = ':0'# 设置 XAUTHORITY 环境变量xauth_path = '/home/pi/.Xauthority'if Path(xauth_path).exists():os.environ['XAUTHORITY'] = xauth_pathelse:logging.warning(f"Xauthority file not found at {xauth_path}")logging.info(f"环境变量设置: DISPLAY={os.environ.get('DISPLAY')}, XAUTHORITY={os.environ.get('XAUTHORITY')}")def rotate_screen():"""旋转屏幕主函数"""# 首先设置环境变量set_environment()# 设置旋转状态变量is_rotated = Falsemax_retries = 5retry_count = 0while not is_rotated and retry_count < max_retries:try:retry_count += 1logging.info(f"尝试第 {retry_count} 次旋转屏幕...")# 直接使用环境变量执行命令,不需要在命令中再次设置result = subprocess.run(['xrandr', '--output', 'HDMI-1', '--rotate', 'left'],capture_output=True,text=True,timeout=10)if result.returncode == 0:logging.info("xrandr 命令执行成功")# 检查当前旋转状态status_result = subprocess.run(['xrandr', '--verbose'],capture_output=True,text=True,timeout=10)if "rotation: left" in status_result.stdout:is_rotated = Truelogging.info("屏幕成功向左旋转")breakelse:logging.warning("屏幕旋转状态未确认,等待后重试...")time.sleep(2)else:logging.error(f"xrandr 命令失败: {result.stderr}")time.sleep(2)except subprocess.CalledProcessError as e:logging.error(f"子进程执行错误: {e}")time.sleep(2)except subprocess.TimeoutExpired:logging.warning("命令执行超时,重试...")time.sleep(2)except Exception as e:logging.error(f"未知错误: {e}")time.sleep(2)if is_rotated:logging.info("屏幕旋转任务完成")return Trueelse:logging.error(f"经过 {max_retries} 次尝试后屏幕旋转失败")return Falsedef create_directory():"""创建目录"""try:dir_path = Path('/home/pi/2026')dir_path.mkdir(exist_ok=True)logging.info(f"目录创建成功: {dir_path}")return Trueexcept Exception as e:logging.error(f"创建目录失败: {e}")return Falseif __name__ == "__main__":logging.info("开始执行屏幕旋转脚本")# 等待系统启动完成logging.info("等待系统启动...")time.sleep(8)# 创建目录create_directory()# 执行屏幕旋转success = rotate_screen()if success:logging.info("脚本执行成功完成")else:logging.error("脚本执行失败")logging.info("脚本执行结束")