文章目录
- 一、麒麟V10(kylin)操作系统中,sudo执行程序后,其环境变量依然为用户家目录。
- (1)背景
- (2)原因
- (3)解决办法
- 二、统信(UOS)操作系统中,QWidget中插入图片,边框显示黑色
- (1)原因
- (2)解决办法
一、麒麟V10(kylin)操作系统中,sudo执行程序后,其环境变量依然为用户家目录。
(1)背景
我的程序在通过sudo,去安装程序安装包时,总会在用户目录下,新建一个root所属组的文件,导致程序后续都无法使用该配置文件。而在除了麒麟v10的系统上没有该问题。
// (1)安装deb包
sudo dpkg -i qq_1520.deb// (2)deb解压后,包含postinst安装脚本,里面执行了升级程序
#!/bin/bash
/opt/QQ/qqupdate >/dev/null 2>&1 &// (3)该升级程序使用QT生成,会有文件写入操作
QSettings s(QSettings::NativeFormat, QSettings::UserScope, "my_exe", "qq");
s.setValue("key", "value");// (4)kylin会在家目录下生成,并且该文件所属组是root,当家目录用户使用该文件时,则没有权限
/home/guofucheng/.config/my_exe/qq.conf// (5)展示文件信息
-rw-r--r-- 1 root root 22 2月 20 16:00 qq.conf
(2)原因
写一个最直接的demo,可以说明根本的原因,当前在家目录下,麒麟v10操作系统的
$home
环境变量为用户目录,而其他操作系统的该变量为/root
是正确的,因为sudo安装安装包时,运行就应该是以根用户运行,而新建的文件也应该生成到根目录下
。
// 麒麟v10
sudo bash -c 'echo $HOME'
/home/guofucheng// 其他操作系统
sudo bash -c 'echo $HOME'
/root
如何知道是该环境变量导致的该问题呢?
因为在QSettings中,如果不指定确切的路径,它默认创建的目录会使用QDir::homePath()
所获取的路径,该函数在linux下是通过$HOME
环境变量来获取的。
(3)解决办法
就是在麒麟v10下,让文件生成到根目录,不影响到家目录用户。手动添加环境变量到根目录,影响面最小。
HOME=/root /opt/QQ/qqupdate >/dev/null 2>&1 &
二、统信(UOS)操作系统中,QWidget中插入图片,边框显示黑色
(1)原因
如果未开启窗口特效功能,那么程序中如果插入包含透明背景的图片,会显示黑色
(2)解决办法
图片本身去掉圆角,去掉透明。或者在系统设置中开启窗口特效功能。