Browsed by
Tag: network

NetworkManager state is now ASLEEP

NetworkManager state is now ASLEEP

最近有一台 HP ELite 笔记本退役了,其实配置还不错,500GB SSD 硬盘、16GB内存,看着挺轻薄,本来还打算用来替换自己平时使用的笔记本,后来发现有些不爽:(1)触控板有点飘 (2)有个键被我不小心按坏了,也许本来就坏了 (3)屏幕时不时出现横线、甚至出现闪烁,很不舒服。

食之无味、弃之可惜。忽然想到可以安装 Debian 做家庭服务器用,上述缺点就无关紧要了。安装了最新的 Debian 10, 然后修改成 Debian(sid),过程很顺利。非常棒!以至于我甚至打算直接 VNC, 或者用 VSCode 登录上去做一些开发工作。

因为是当服务器用,因此一直都是合盖,然后扔角落里默默工作。接着又发现一个问题:过一段时间后,WiFi 网络老是断开,无法远程登录,需要重新开盖然后登录。琢磨着大概是系统休眠了,检查 syslog 信息,发现以下信息:

NetworkManager: sleep: wake requested (sleeping: yes  enabled: yes)
NetworkManager: state change: unavailable -> unmanaged (reason 'sleeping', sys-iface-state: 'managed')
NetworkManager: NetworkManager state is now ASLEEP

看来确实休眠了。搜索网络,查到一篇 Ubuntu 停止休眠的文章(请点击此处),考虑到 Ubuntu 和 Debian 本质没什么区别,操作也是有效的。

关闭休眠功能,请使用以下命令:

sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

当然,如果后悔了,需要重新打开休眠功能,可以使用以下命令(未验证):

sudo systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target
qt network中的一点问题

qt network中的一点问题

在一个小应用中使用了qt的network模块,调用网站的一个接口(HTTP GET方式),获得相应的结果。操作非常简单,可是却出现了问题。

首先是在windows上,运行程序后,提示无法定位libeay32.dll。这个是openSSL的动态链接库,不明白为什么qt4.8.5(windows)默认链接了这个库。查看文档,貌似缺省情况下是不编译进SSL功能的,而且我们用的包并不是自己编译的,是直接从qt网站下载安装的。解决方法也简单,无非就是安装openssl的库,copy相应的dll到exe文件同一目录下即可。

接着又出现了问题,调用HTTP后,服务器返回“406 NOT acceptable”。直接将链接放在浏览器中执行又没有任何问题。检查server上的log,发现apache启动了ModSecurity模块,该模块检查了User-Agent头,如果太简单则认为是假请求(spam请求?),拒绝该HTTP请求。

用wireshark抓了一下包,发现QNetworkRequest默认的User-Agent的确非常简单:

User-Agent: Mozilla/5.0

解决方式同样简单,我们强行修改为稍微复杂一点即可,例如:

QNetworkRequest netReq;
netReq.setUrl(destUrl);
netReq.setRawHeader("User-Agent","Mozilla/5.0 (X11; Linux x86_64)");

这样就可以绕开apache模块的检查。