Remmina 无法通过tls连接服务器

今天遇到一个很奇怪的问题,我在本地装了一台win10的虚拟机,可以直接通过快速链接栏链接rdp,但服务器不可以,报错,不知为何。甚至那台win10的虚拟机可以正常连接服务器。

快速链接栏

搜索了很多,最后在stackoverflow上看见一个回答[1]说是把高级里的negotiation改成TLS,试了试,并不行,于是抱着死马当活马医的态度,又试了试其它的选项,修改为RDP,很顺利的连上了。

就结果来讲,我推测是系统版本的原因,服务器是windows server,比较旧,虚拟机的RDP是官方的,肯定做了兼容,这样就解释通了

node调取打印机dll输出乱码

背景介绍

最近公司接了一个景区的项目,好巧不巧的分给我一个打票的功能。

过程

这有什么难的呀?

客户有一个一直在运行的系统,我去看了看,就是做一个网页然后预览,调用系统打印。

我求你当个人吧

客户提了一个需求,点击打印直接打印,不要什么预览确认,还要一定要B-S程序,也就是说只能使用IE的ActiveX调用dll。

这个时候我们的讨论结果是:没问题,框架支持IE,我可以用ActiveX开发。

我可求你当个人吧x2

是的你们没有猜错,现代框架哪还有兼容IE ActiveX的。只能用node在本地跑一个websocket server,于是只能重写了,因为涉及到一些高度的计算方法,要重写还挺麻烦的,我采用了一个取巧的方法:node直接接收指令打印,算法依旧在web端完成。

问题出现了

dll提供的似乎是按照GBK进行的解码,所以打印出来全是乱码,也就是说我们要转换一下编码再发送给打印机。

解决方案

iconv库,可以将已知编码转换为另一种编码,此处将UTF-8转换为GBK

如何远程连接wamp环境下的MySQL

开放端口会导致安全问题,因此,请保证只用于debug或开发环境

相信各位都知道,MySQL远程访问需要新建账户,例如


grant all on example_db.* on "example_user"@"%" identified by "your password";
flush privileges;

所以导致无法访问的罪魁祸首不是mysql,是windows防火墙,我们需要使用下列操作步骤来开放3306端口。

搜索->防火墙->高级安全 Windows Defender 防火墙->入站规则

新建规则->端口->放行3306

wordpress HTTPS修正

前文:迁移wordpress到HTTPS

前文提到,使用docker部署,因为前后https模式不同步(前面是https后面是http://ip:port)导致需要修改配置文件,所以我决定把wordpress从docker迁移出来,因为docker挂载目录的其实就是wordpress本体在的位置


server {
  listen  443;
  server_name wpdev.endercaster.lan;#记得改掉
 #SSL证书配置参照前文
  root /opt/wordpress;#记得改掉
  location / {
      try_files $uri $uri/ /index.php?$is_args$args; #这里需要注意一下,不要少打
      index index.php;
  }
  # 这里替换为:在设置->固定连接->改为任意一个非朴素型
  #location ~ ^/wp-json/ {
  #    rewrite ^/wp-json/(.*?)$ /?rest_route=/$1 last;
  #}
  location ~ \.php$ {
        fastcgi_pass unix:/run/php/wp-test.sock;
        include fastcgi.conf;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
}

然后把前文中wp-config.php加的代码都删掉。

配置php-fpm,如果只有这一个项目,可以把上面的fastcgi_pass改掉,跳过这步


[wordpress]#从www改为wordpress
user = www-data
group = www-data
listen = /run/php/wp-test.sock
listen.mode = 0666


# 重启php-fpm
systemctl restart php7.2-fpm
#现在可以重新读取nginx配置文件了
nginx -t 
# 如果上面的输出是successful的话
systemctl reload nginx

然后登录查看工具->站点健康,看看有没有少一些依赖,给它装上。

至此,我的站点终于完美的迁移到https啦!

PHP文件无读写权限

平台:CentOS + nginx + php-fpm

首先说明出现场景:权限修改为777依旧提示没有权限/文件未找到

解决方案:


setenforce 0
# [/your/path/here] 支持正则表达式写法,想要递归的话请使用正则表达式 [/your/path/here(/.*)?]
semanage fcontext -a -t httpd_sys_rw_content_t [/your/path/here]
# 或
semanage fcontext -m -t httpd_sys_rw_content_t [/your/path/here]
restorecon
setenforce 1

事情是这样的,客户的服务器是CentOS,我上传图片的时候需要先存本地然后上传到云,测试站测没问题,预发布站出问题了(因为是新系统,预发布站和生产站这个时候都部署好了),我当时就惊了。

第一件事想到的就是权限问题,于是检查一下:
drwxrwxrwx
?????????小老弟你怎么回事
总之之后通过修改代码的方式定位到了是在复制文件的时候没有成功从/tmp复制到项目文件夹下,这个时候我已经怀疑是有其他权限控制这里了(是的,当时并没想到selinux,平常没接触过这层),但是时间比较紧急,所以先去确认了一下生产站上传功能是否正常,结果是正常的,这时候我就很迷惑,因为预发布和测试站结果不同很合理,毕竟操作系统和服务器(apache/nginx)都不一样,但是预发布和线上站应该是一样的啊?(作为开发人员我的原则是不碰线上站的东西,所以没见过线上站的服务器,结果它还真【此处自主规制】不一样,太打脸了)
由于线上没有问题,这个问题就先告一段落了

本来想着反正部署本来就不是我的活,就算了,然后上班路上突然想起来一件事:结合vmware的共享文件夹功能是不是可以实现windows下开发,生产环境调试?于是我准备了一个laravel项目,在虚拟机上打开共享,考虑到在Centos上踩过坑,系统就选用的CentOS 8,安装nginx+php-fpm,配置好之后,很好,访问404,查看nginx日志显示 *16 stat() “/mnt/hgfs/workspace/laravel/public/favicon.ico” failed (13: Permission denied) ,这个没跑了,肯定是权限问题,chmod,chown一气呵成,刷新网页一看,很好,根本没有效果,于是把代码文件复制到虚拟机磁盘上,修改配置文件重启nginx,至少php解析没问题了,但是提示写日志失败,没有权限,那就给权限呗,于是从455到777试了一遍还是不行,不行咋整啊?上网搜吧,转了一圈,基本都是在说权限没给够,都777了肯定不是权限没给够了,然后我看到了一篇文件无法写入的文[1],提到了selinux,我记得这是一个独立的权限系统,那事情就简单了,百度:selinux 配置

先看到了怎么配置关闭,我信了你的邪,我去服务器上还能把selinux关了是咋的,走你,下一个。

之后是selinux配置说明[2],很长,看到那个fcontext的命令,我就知道怎么整了 ,但是得有理有据是不是,比如那个-t后面的参数是怎么来的?

再之后看到了以Apache举例配置selinux的[3],都是服务器软件,理论上是一样的,既然能看进程的selinux context,那就好说了


ps -eZ | grep php
# 可以看到context是httpd_t
# 既然可以查看selinux 开放的端口列表,应该可以查看上下文列表吧,于是我试了一下
semanage fcontext --list
# 的确,输出了好多东西,我来找一下看看
semanage fcontext --list | grep :httpd_
# 出现了很多context,命名很有规则,可以看到httpd_sys_rw_content_t应该就是我想要的了
# httpd所属 rw权限
# 如果还没有context的话,添加
semanage fcontext -a -t httpd_sys_rw_content_t '/opt/endercaster/laravel(/.*)?'
# 如果有context的话,修改
semanage fcontext -m -t httpd_sys_rw_content_t '/opt/endercaster/laravel(/.*)?'
# 然后让设置立即生效
restorecon /opt/endercaster/laravel
# 记得确认一下
ls -Z /opt/endercaster/laravel

等等,刚才的vmhgfs的问题是不是也是这个导致的?于是我采用了最简单暴力的方法:把selinux关掉(编辑/etc/selinux/config)事实证明真的是selinux的问题,但是vmware共享不能修改标签……

你以为还有下文?至此两个问题都已经解决了。是的,都解决了

部署不会用vmware共享文件夹,而不用共享文件夹的selinux设置已经解决了。

而使用vmware共享文件夹做环境测试只需要关闭selinux即可。

[1] linux下文件权限777了,file_put_contents()却不能写入,为什么?

[2]如何配置selinux

[3]SELinux中Apache的配置

Chrome地址栏默认不再是自动补全

首先说明一点,这是个feature,相信找到这的都觉得这不是什么好东西,所以我们来关了它

原地址

As Harwin & PlasticIssue points out, to avoid this issue, one can go to chrome://flags/#omnibox-drive-suggestions

and set that “Omnibox Google Drive Document suggestions” flag to Disabled.

What is Google thinking, is this about increasing search ad profits at the expense of usability?

上文中给出了一个Chrome设置的地址,点击之后会进入设置页面,同时需要改的那一项会被标黄

如同这位老哥吐槽的一样,Google为什么会想到这么个东西,好影响体验啊

eclipse自动补全失效

好久没用eclipse写项目了(真的很久,这次下载的eclipse自动补全特别难用,一开始以为是以前遇到的那个xml和dtd下载不下来的问题,然后尝试修复之后并不是。

后来查找到这篇文章

eclipse可真的太过分了,居然改了默认快捷键

在keys绑定中修改以下快捷键:word Completion快捷键改回 ctl+alt+/,

Word Completion : alt + / -> ctrl + alt + /
Content Assitant : crtl + space -> alt + /

这样就还原以往的使用方法了

MySQL导致关机时间长(Waiting for table flush)

首先说结论:双系统时区同步( timedatectl set-local-rtc 1 )导致

一直以来我这个笔记本在关机的时候都有些慢,本来也没想去管它(因为以前也试图跟开关机的错误作斗争,但我没赢过)

但是随着我的时间越来越紧,也没耐心等它慢慢关机了,就稍微做了个笔记,去搜了一下,大体上是说,mysql在清理垃圾数据,而时区设置导致mysql认为有来自未来(8小时之后)的数据,为了保持数据缓存干净,所以一直在等待,在网络越来越好的情况下,双系统时间同步对我也没那么重要了,所以把这个设置调回了默认值,然后重启系统,好了

后记:这篇记录太早了,才发现没发布出去,大部分都是后来补写的,有没太写清楚的地方,请见谅。

Windows下的dot中文渲染乱码解决

dot语言绘图有很多渲染器,默认渲染器在windows下无论如何调整(gvedit.exe)都会把中文渲染成乱码。

尝试解决方案如:在graph/node段加入fontname=”Microsoft Yahei” (cairo引擎中这种方式在node段生效)

于是我开始思考,是不是需要手动调用呢?事实很快在我脸上甩了一巴掌:手动调用报13错误。

在网上搜索了好一段时间之后,终于在一篇说明如何使用dot渲染矢量图的文章里找到了解决方法

dot -T类型:渲染器 文件名 -o 输出文件

此处我们使用cairo作为渲染器,完美解决问题