xz1111111123 2025-07-19 16:53 采纳率: 0%
浏览 189

QStandardPaths: wrong permissions on runtime directory /run/user/1000/, 0755 instead of 0700

用ubuntu运行openfoam时出现QStandardPaths: wrong permissions on runtime directory /run/user/1000/, 0755 instead of 0700

img

  • 写回答

5条回答 默认 最新

  • 檀越@新空间 2025-07-19 16:54
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    在使用 Ubuntu 运行 OpenFOAM 时,如果出现以下错误信息:

    QStandardPaths: wrong permissions on runtime directory /run/user/1000/, 0755 instead of 0700
    

    这是由于 Qt 框架对运行时目录的权限要求较高。Qt 要求 /run/user/1000/ 目录的权限为 0700(即仅当前用户可读写),但系统默认设置为 0755(其他用户也可读)。


    问题原因

    • Qt 在启动某些图形界面程序(如 paraFoamfoamX)时,会尝试创建或访问 /run/user/1000/ 目录。
    • 该目录的权限为 0755,而 Qt 预期的是 0700,因此触发警告。

    🔧 解决方案

    1. 修改目录权限

    你可以手动将 /run/user/1000/ 的权限更改为 0700

    执行命令:

    sudo chmod 0700 /run/user/1000/
    

    注意: 此操作是临时性的,重启后可能会恢复为 0755


    2. 永久性修改(推荐)

    为了防止每次重启后权限被重置,可以编辑 systemd 的配置文件,让系统在启动时自动设置正确的权限。

    步骤如下:

    1. 创建一个 systemd 服务文件:

      sudo nano /etc/systemd/system/set-permissions.service
      
    2. 添加以下内容:

      [Unit]
      Description=Set correct permissions for /run/user/1000/
      
      [Service]
      Type=oneshot
      ExecStart=/bin/chmod 0700 /run/user/1000/
      RemainAfterExit=yes
      
      [Install]
      WantedBy=multi-user.target
      
    3. 保存并退出(按 Ctrl+O,然后 Enter,再按 Ctrl+X)。

    4. 启用并启动服务:

      sudo systemctl enable set-permissions.service
      sudo systemctl start set-permissions.service
      

    3. 使用脚本自动处理(可选)

    你也可以编写一个 shell 脚本,在每次登录时自动检查并设置权限。

    示例脚本:

    #!/bin/bash
    if [ "$(stat -c "%a" /run/user/1000/)" != "700" ]; then
        sudo chmod 0700 /run/user/1000/
    fi
    

    将脚本保存为 ~/.set_permissions.sh,并添加到你的 .bashrc.profile 中:

    # ~/.bashrc
    if [ -f ~/.set_permissions.sh ]; then
        source ~/.set_permissions.sh
    fi
    

    🛠️ 代码示例(可选)

    如果你正在运行 OpenFOAM 的脚本,并且想在其中加入权限检查,可以这样做:

    #!/bin/bash
    
    RUNTIME_DIR="/run/user/$(id -u)"
    
    if [ ! -d "$RUNTIME_DIR" ]; then
        echo "Creating runtime directory: $RUNTIME_DIR"
        mkdir -p "$RUNTIME_DIR"
        chmod 0700 "$RUNTIME_DIR"
    fi
    
    # 然后继续执行 OpenFOAM 命令...
    

    总结

    | 步骤 | 内容 | |------|------| | 1 | 修改 /run/user/1000/ 权限为 0700 | | 2 | 使用 systemd 服务实现永久生效 | | 3 | 可选:使用脚本自动检测并修复权限 | | 4 | 可选:在 OpenFOAM 脚本中加入权限检查逻辑 |


    如有更多关于 OpenFOAM 的问题,欢迎继续提问!

    评论

报告相同问题?

问题事件

  • 创建了问题 7月19日