119 lines
2.9 KiB
Python
119 lines
2.9 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
Linux 日志删除助手
|
|
在 UOS LiveCD 环境中运行,帮助用户快速清理磁盘空间
|
|
"""
|
|
import sys
|
|
import os
|
|
|
|
# 添加当前目录到 Python 路径
|
|
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
if current_dir not in sys.path:
|
|
sys.path.insert(0, current_dir)
|
|
|
|
from PyQt5.QtWidgets import QApplication, QMessageBox
|
|
from PyQt5.QtCore import Qt
|
|
from PyQt5.QtGui import QFont
|
|
|
|
from utils import check_sudo_needs_password, get_sudo_password, verify_sudo_password
|
|
from gui.main_window import MainWindow
|
|
from gui.sudo_dialog import SudoDialog
|
|
|
|
|
|
def check_environment():
|
|
"""检查运行环境"""
|
|
# 检查是否为 Linux 系统
|
|
if sys.platform != 'linux':
|
|
QMessageBox.warning(
|
|
None,
|
|
"环境警告",
|
|
"本工具设计用于 Linux 系统,\n"
|
|
"当前运行在非 Linux 环境中,部分功能可能无法正常工作。"
|
|
)
|
|
|
|
# 检查是否有 root 权限或 sudo
|
|
if os.geteuid() != 0:
|
|
if check_sudo_needs_password():
|
|
return True # 需要密码,稍后会提示
|
|
else:
|
|
# sudo 不需要密码,可以直接使用
|
|
return True
|
|
|
|
return True # 已经是 root
|
|
|
|
|
|
def get_sudo_access():
|
|
"""获取 sudo 权限"""
|
|
# 检查是否已经是 root
|
|
if os.geteuid() == 0:
|
|
return None # 不需要密码
|
|
|
|
# 检查 sudo 是否需要密码
|
|
if not check_sudo_needs_password():
|
|
return None # 不需要密码
|
|
|
|
# 需要密码,显示密码输入对话框
|
|
dialog = SudoDialog()
|
|
|
|
if dialog.exec_() == SudoDialog.Accepted:
|
|
password = dialog.get_password()
|
|
|
|
# 验证密码
|
|
if verify_sudo_password(password):
|
|
return password
|
|
else:
|
|
QMessageBox.critical(
|
|
None,
|
|
"密码错误",
|
|
"sudo 密码不正确,程序将退出。"
|
|
)
|
|
return None
|
|
else:
|
|
# 用户取消
|
|
return None
|
|
|
|
|
|
def main():
|
|
"""主函数"""
|
|
# 设置高 DPI 支持
|
|
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
|
|
QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True)
|
|
|
|
# 创建应用
|
|
app = QApplication(sys.argv)
|
|
|
|
# 设置应用样式
|
|
app.setStyle('Fusion')
|
|
|
|
# 设置默认字体
|
|
font = QFont()
|
|
font.setPointSize(10)
|
|
app.setFont(font)
|
|
|
|
# 检查环境
|
|
if not check_environment():
|
|
sys.exit(1)
|
|
|
|
# 获取 sudo 权限
|
|
sudo_password = get_sudo_access()
|
|
|
|
# 如果需要密码但没有提供,且不是 root,则退出
|
|
if sudo_password is None and os.geteuid() != 0:
|
|
if check_sudo_needs_password():
|
|
sys.exit(0)
|
|
|
|
# 创建主窗口
|
|
window = MainWindow(sudo_password)
|
|
window.show()
|
|
|
|
# 启动时自动显示分区选择对话框
|
|
window.switch_partition()
|
|
|
|
# 运行应用
|
|
sys.exit(app.exec_())
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|