分类 Window 下的文章

教程 | Linux下VirtualGL+TurboVNC远程桌面使用显卡


背景

这里使用的是国产统信UOS操作系统的实体机,显卡是Nvidia Quadro P620,默认源里是没有VirtualGL和TurboVNC两个软件的,所以需要编译安装。还测试了EXSI8.0情况下使用Nvidia Tesla V100直通安装的银河麒麟SP10虚拟机,这里需要注意一下,开机启动方式必须是EFI或者UEFI,并且勾选安全启动,要不直接使用BIdOS的方式启动你的驱动时怎么也安装不上的。

安装显卡驱动

更新系统及查看相关信息

  • sudo apt update && sudo apt upgrade -y # 更新系统
  • sudo apt install dkms build-essential linux-headers-generic
  • sudo lsmod | grep nouveau #查看nouveau的开源驱动是否被使用
  • sudo lspci | grep VGA #查看集成显卡
  • sudo lspci | grep NVIDIA #查看英伟达显卡
  • sudo lshw –c video | grep configuration #查看显卡驱动
  • sudo systemctl stop lightdm # 暂停界面

禁用nouveau驱动

打开或创建黑名单配置文件:
通常,这个文件位于 /etc/modprobe.d/ 目录下。你可以创建一个新的配置文件专门用来禁用 nouveau,例如:

  • sudo touch /etc/modprobe.d/blacklist-nvidia-nouveau.conf
  • cat >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf << EOF
  • blacklist nouveau
  • options nouveau modeset=0
  • EOF

以上作用是将 nouveau 驱动添加到黑名单,并设置 nouveau 不使用任何模式设置。

如果时EXSI直通显卡的话需要启用对不支持的GPU的支持。

  • sudo touch /etc/modprobe.d/nvidia.conf
  • cat >> /etc/modprobe.d/nvidia.conf << EOF
  • options nvidia NVreg_OpenRmEnableUnsupportedGpus=1
  • EOF

禁用驱动后,需要重新生成initramfs,以确保在下一次启动时不加载 nouveau 驱动。

  • sudo dracut --force # 重新生成初始化RAM磁盘Fedora、CentOS和RHEL的系统
  • sudo update-initramfs -u # 重新生成初始化RAM磁盘Debian或Ubuntu的系统
  • sudo apt --purge remove nvidia-* # 删除所有Nvidia的驱动
  • sudo reboot #重启系统

官网解决此问题的大神回复1
官网解决此问题的大神回复2

安装Nvidia驱动

Nvidia官网查好版本下载指定驱动:NVIDIA-Linux-x86_64-535.183.06.run

  • wget https://us.download.nvidia.com/tesla/535.183.06/NVIDIA-Linux-x86_64-535.183.06.run
  • chmod +x NVIDIA-Linux-x86_64-535.183.06.run # 给文件执行权限
  • sudo ./NVIDIA-Linux-x86_64-535.183.06.run # 运行后一路回车确认就行

查看最终驱动安装结果:
CIOMP_2024-09-14_09-26-17.png

VirtualGL

编译环境安装

  • # 银河麒麟
  • yum install gcc gcc-c++ git cmake libstdc++-static
  • # 统信
  • sudo apt install gcc g++

依赖环境安装

  • # 银河麒麟
  • yum install opencl-headers ocl-icd ocl-icd-devel libX11-devel libXext-devel libXrender-dev libXtst-devel libXt-devel xcb-util-keysyms-devel
  • # 统信
  • sudo apt install opencl-headers ocl-icd-opencl-dev libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev libxcb-keysyms-dev

下载源码编译安装

  • git clone https://github.com/VirtualGL/virtualgl.git # 下载源码项目
  • cmake . # 配置项目 或者加上-DCMKAE_INSTALL_PREFIX=/usr/opt参数设置安装目录 默认安装到/opt目录下
  • make -j9 && make install # 编译并且安装

配置

  • sudo nvidia-xconfig --query-gpu-info # 查看busid
  • sudo nvidia-xconfig -a --allow-empty-initial-configuration --virtual=1920x1200 --busid PCI:0@3:0:0 # 填上一步中获取的busid
  • sudo service lightdm stop # 关闭显示服务
  • sudo /opt/VirtualGL/bin/vglserver_config # 选1,其他都为Y,最后x退出
  • usermod -a -G vglusers <用户名> # 添加用户进用户组vglusers,使其具有相关权限,否则后面远程桌面的时候启用不了VirtualGL。<用户名> 改为你的用户名
  • sudo service lightdm start # 开启显示服务
  • sudo reboot

TurboVNC

依赖环境安装

  • # 银河麒麟
  • yum install libjpeg-turbo libjpeg-turbo-devel pam-devel java java-devel
  • # 统信
  • sudo apt install libturbojpeg0-dev libpam0g-dev java-dev

防止配置时出现Could no find PAM headers报错

主要是依赖安装完了,对应的头文件也有,说啥检查不到文件,应该是有些环境没配置才导致的这个错误。

注释掉unix/Xvnc/programs/Xserver/hw/vnc/CMakelists.txt的14行#message(FATAL_ERROR "Could no find PAM headers")
CIOMP_2024-09-10_20-01-30.png

下载源码编译安装

  • git clone https://github.com/TurboVNC/turbovnc.git
  • cmake . # 配置项目 或者加上-DCMKAE_INSTALL_PREFIX=/usr/opt参数设置安装目录 默认安装到/opt目录下
  • make -j9 && make install # 编译并且安装

配置

/opt/TurboVNC/etc/turbovncserver.conf配置文件修改配置如下:

  • $useVGL=1; # 主要是让vnc使用VirtualGL
  • $wm="deepin"; # 正常找`/usr/share/xsession/`下的桌面配置,默认会找gnome.desktop或ubuntu.destop,统信用的lightdm,所以这里添加一个deepin。

运行vncserver

  • /opt/TurboVNC/bin/vncserver -geometry 1920x1080 :1 # 开启VNC

结合VirtualGL运行相关程序

  • /opt/VirtualGL/bin/vglrun glxinfo | grep OpenGL # 将会输出使用显卡的情况输出

CIOMP_2024-09-14_11-28-57.png

最终连接效果

CIOMP_2024-09-13_10-32-35.png


教程 | Windows10 系统开启ssh Server服务


安装方法:

1、 下载最新的二进制安装版直接安装:
OpenSSH-Win64-v9.5.0.0.zip
也可以去开源项目里下载微软开源的openssh

2、打开防火墙,开启22端口 (也可使用控制面板中防火墙 高级 进行设置)

  • netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22

3、 设置开机启动

  • Set-Service sshd -StartupType Automatic
  • Set-Service ssh-agent -StartupType Automatic

4 、 启动ssh服务

  • Start-Service sshd
  • Start-Service ssh-agent

教程 | Windows远程桌面多用户远程登录配置


RDP Wrapper

干嘛的?RDPWrap 是一 Windows 远程桌面登录增强工具,它可以让多个用户同时远程登录到同一台 Windows 计算机而不会互相干扰,这对于家庭用户和小型企业用户来说非常有用。

工具获取地址

  1. RDP Wrapper Github下载地址
  2. RDPWrap-v1.6.2.zip(上不了github的下这个)

使用方法

1.下载解压文件
2.右键install.bat文件以管理员方式运行,出现 successful installed 提示,就表示安装好了,按任意键关闭窗口即可。

运行完成后会在 C:Program FilesRDP Wrapper下面生成2个文件:rdpwrap.dll,rdpwrap.ini(配置文件).

CIOMP_2024-07-04_18-02-40.png
3.点击RDPConf.exe检查配置是否成功,成功如下图。
CIOMP_2024-07-04_17-57-51.png
CIOMP_2024-07-04_18-00-43.png

会出现的问题

1.RDPConf.exe中Service state后的ver.显示是 N/A。

解决办法:直接在cmd或运行里输入winver查看操作系统内部版本。

2.RDPConf.exe中出现红字的[not supported] 提示,此提示代表不能成功配置,主要原因是C:\Program Files\RDP Wrapper\rdpwrap.ini内没有当前系统对应版本的配置。

解决办法:在rdpwrap.ini项目中下载最新的rdpwrap.ini文件覆盖掉C:\Program Files\RDP Wrapper\rdpwrap.ini的。


教程 | vscode ssh远程linux开发c/c++界面程序


背景

最近又要处理统信的适配,现在的场景就是把代码放到实体机上进行编译,每次都得来回跑。。。
最近捣鼓了一下新方式进行处理,使用vscode作为代码编辑通过ssh链接linux机器,然后运行软件用x11的形式回显,这样就能在自己的机器上完美的远程编译与测试。x server在windows上的显示建议用VcXsrv,因为Xming这个东西对GLX支持的不怎么好,运行glxgears会黑屏。

环境

  1. 一台被远程的Linux机器,并且开启ssh服务
  2. 编辑器软件:vscode
  3. XServer服务: VcXsrv 或者是 Xming(还需要安装Xming-fronts才能运行)

本地vcxsrv-64.1.20.14.0.installer.zip

安装步骤

ssh免密登录

在windows中按下win+R快捷键进入cmd命令框中运行命令ssh-keygen
会在C:\Users\Administrator\.ssh文件夹下生成了两个文件

  • id_rsa.pub # 公钥
  • id_rsa # 私钥

登录服务器,在用户的.ssh目录下生成authorized_keys,该文件包含一系列允许登录该服务器的公钥,没有就新建该文件。将公钥内容追加到~/.ssh/authorized_keys

  • echo "公钥内容" >> ~/.ssh/authorized_keys

并在配置文件C:\Users\Administrator\.ssh\config中的对应主机下添加如下内容:

  • IdentityFile "C:\Users\Administrator\.ssh\id_rsa"//设置私钥路径

vscode 安装插件

本地安装【Remote - SSH】插件。
ssh连接服务器安装【Remote X11】和【Remote X11 (ssh)】两个插件。

配置

并在配置文件C:\Users\Administrator\.ssh\config中的对应主机下添加如下内容:

  • ForwardX11 yes
  • ForwardX11Trusted yes
  • ForwardAgent yes

本地安装X11服务

下载完VcXsrv直接安装就行,一路下一步。
安装完之后点击XLaunch.exe启动,会弹出一个配置界面。
选中Multiple windows后填写视窗ID,这里填的是0(根据自己的情况而定)下一步
CIOMP_2024-06-18_16-19-59.png
选择程序启动方式,默认就行,下一步。
CIOMP_2024-06-18_16-55-45.png
这里将禁用访问控制的配置项勾上,然后下一步,再就是完成,会在右下角留下X的图标,等待客户端的连接。
CIOMP_2024-06-18_16-58-25.png

putty的X11显示程序

配置在Connection->SSH->X11里,这里勾选Enable X11 forwaring,X display Location这个填localhost:11.0,默认转发到本地是localhost:0.0(啥也不填的情况)(会自动设置服务器的DISPLAY值),如果想修改其他端口也可以。
CIOMP_2024-06-20_20-16-10.png
配置好后连接远程linux服务器。

注:这里需要注意一下,linux的端口是putty自动设置的,会将linux设置的端口转发成本地设置端口,所以XServer的端口应与putty内设置的端口一致。

测试一下:

  • ciomp@ciomp-PC:~$ echo $DISPLAY
  • localhost:10.0
  • ciomp@ciomp-PC:~$ xclock
  • Warning: Missing charsets in String to FontSet conversion

显示效果如下:
CIOMP_2024-06-20_20-07-00.png

vscode的X11显示程序

remote x11插件配置display端口为11(根据本地XServer开启的端口一致),其他默认即可,如下:
CIOMP_2024-06-20_20-26-54.png

打开一个测试程序,配置好launch.json文件直接F5运行,效果如下
CIOMP_2024-06-20_20-31-43.png

直接在vscode终端执行测试如下:
CIOMP_2024-06-22_09-26-04.png

直接在vscode终端执行测试2如下:
CIOMP_2024-09-15_17-12-12.png

如果配置正确,但是连接出现错误的话(比如连了一宿)可以ctrl+shift+p调出命令输入框执行Remote X11: Reconnect Display

VSCode Server 下载时间过长问题

正常通过ssh连接的时候vscode会让远程机器下载VSCode Server,如果未联网或者下载慢请按如下操作:

打开VScode的帮助-关于(help-about)模块,出现Version,Commit,Data,Electron等信息,其中最关键的是Commit后面的字符串,被称为Commit ID,其是由40位十六进制字符串,利用Commit ID下载VScode Server,文件为vscode-server-linux-x64.tar.gz,下载链接有两个

  • https://update.code.visualstudio.com/commit:${commit_id}/server-linux-x64/stable
  • https://vscode.download.prss.microsoft.com/dbazure/download/stable/${commit_id}/vscode-server-linux-x64.tar.gz

注意把:${commit_id}替换成对应的Commit ID

下载后将vscode-server-linux解压到连接用户的目录下的.vscode-server/bin/${commit_id}下,具体操作如下:

  • # 1 在/home/usr/下新建文件夹.vscode-server/bin/${commit_id}
  • mkdir -p ~/.vscode-server/bin/${commit_id}
  • # 2 将vscode-server-linux-x64.tar.gz文件放置在${commit_id}目录下,并进入该文件夹
  • cd ~/.vscode-server/bin/${commit_id}
  • # 3 解压文件vscode-server-linux-x64.tar.gz
  • tar -xvzf vscode-server-linux-x64.tar.gz --strip-components 1
  • # 4 删除多余文件vscode-server-linux-x64.tar.gz
  • rm vscode-server-linux-x64.tar.gz
  • # 5 重启VScode,在安装完成Remote-ssh后,可通过ssh连接远程服务器,此时会生成data,extensions文件夹,可以连接成功,表明VScode-Server安装成功。

教程 | PowerDNS的部署与使用


PowerDNS简介

PowerDNS是一个跨平台的开源DNS服务组件,成立于20世纪90年代末,是开源DNS软件、服务和支持的主要供应商。它提供了三个核心组件:Authoritative、Recursor和dnsdist,分别作为权威服务器、域名递归解析和DNS服务负载均衡来使用,每个服务独立存在,可根据需求进行部署。PowerDNS支持多种数据库后端,包括MySQL、PostgreSQL和SQLite等,以适应不同的实际需求。在Windows环境下,PowerDNS使用Access的mdb文件记录DNS信息,而在Linux/Unix环境下则使用MySQL来记录。

PowerDNS的主要特点包括高性能、可扩展性、安全性和灵活性。它采用多线程和多进程的架构,能够处理大量的DNS查询请求,并提供快速的响应时间。同时,PowerDNS支持分布式部署,可以通过添加更多的服务器来扩展系统的容量和吞吐量。在安全性方面,PowerDNS具有DNSSEC(DNS安全扩展)支持和防止DNS缓存污染等功能。

安装

  • # 这边是用ubuntu。
  • sudo apt install pdns pdns-backend-mysql pdns-recursor

配置

mysql

mysql的服务上网找,我这里用的宝塔。
创建pdns_server数据库

  • CREATE TABLE domains (
  • id INT AUTO_INCREMENT,
  • name VARCHAR(255) NOT NULL,
  • master VARCHAR(128) DEFAULT NULL,
  • last_check INT DEFAULT NULL,
  • type VARCHAR(6) NOT NULL,
  • notified_serial INT DEFAULT NULL,
  • account VARCHAR(40) DEFAULT NULL,
  • PRIMARY KEY (id)
  • ) Engine=InnoDB;
  • CREATE UNIQUE INDEX name_index ON domains(name);
  • CREATE TABLE records (
  • id BIGINT AUTO_INCREMENT,
  • domain_id INT DEFAULT NULL,
  • name VARCHAR(255) DEFAULT NULL,
  • type VARCHAR(10) DEFAULT NULL,
  • content BLOB(64000) DEFAULT NULL,
  • ttl INT DEFAULT NULL,
  • prio INT DEFAULT NULL,
  • change_date INT DEFAULT NULL,
  • disabled TINYINT(1) DEFAULT 0,
  • ordername VARCHAR(255) BINARY DEFAULT NULL,
  • auth TINYINT(1) DEFAULT 1,
  • PRIMARY KEY (id)
  • ) Engine=InnoDB;
  • CREATE INDEX nametype_index ON records(name,type);
  • CREATE INDEX domain_id ON records(domain_id);
  • CREATE INDEX recordorder ON records (domain_id, ordername);
  • CREATE TABLE supermasters (
  • ip VARCHAR(64) NOT NULL,
  • nameserver VARCHAR(255) NOT NULL,
  • account VARCHAR(40) NOT NULL,
  • PRIMARY KEY (ip, nameserver)
  • ) Engine=InnoDB;
  • CREATE TABLE comments (
  • id INT AUTO_INCREMENT,
  • domain_id INT NOT NULL,
  • name VARCHAR(255) NOT NULL,
  • type VARCHAR(10) NOT NULL,
  • modified_at INT NOT NULL,
  • account VARCHAR(40) NOT NULL,
  • comment BLOB(64000) NOT NULL,
  • PRIMARY KEY (id)
  • ) Engine=InnoDB;
  • CREATE INDEX comments_domain_id_idx ON comments (domain_id);
  • CREATE INDEX comments_name_type_idx ON comments (name, type);
  • CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
  • CREATE TABLE domainmetadata (
  • id INT AUTO_INCREMENT,
  • domain_id INT NOT NULL,
  • kind VARCHAR(32),
  • content TEXT,
  • PRIMARY KEY (id)
  • ) Engine=InnoDB;
  • CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
  • CREATE TABLE cryptokeys (
  • id INT AUTO_INCREMENT,
  • domain_id INT NOT NULL,
  • flags INT NOT NULL,
  • active BOOL,
  • content TEXT,
  • PRIMARY KEY(id)
  • ) Engine=InnoDB;
  • CREATE INDEX domainidindex ON cryptokeys(domain_id);
  • CREATE TABLE tsigkeys (
  • id INT AUTO_INCREMENT,
  • name VARCHAR(255),
  • algorithm VARCHAR(50),
  • secret VARCHAR(255),
  • PRIMARY KEY (id)
  • ) Engine=InnoDB;
  • CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

pdns server

  • vim /etc/pdns/pdns.conf
  • #设置数据库相关的
  • launch=gmysql
  • gmysql-host=10.0.0.110
  • gmysql-port=3306
  • gmysql-dbname=pdns_server
  • #管理数据库的相关用户和密码
  • gmysql-user=pdns_server
  • gmysql-password=pdns_server
  • #访问权限
  • allow-axfr-ips=0.0.0.0/0,::1
  • allow-dnsupdate-from=0.0.0.0/0,::1
  • allow-notify-from=0.0.0.0/0,::/0
  • allow-unsigned-notify=yes
  • also-notify=10.0.0.10
  • #daemon 启动
  • daemon=yes
  • disable-axfr=no
  • guardian=no
  • #是否master
  • master=yes
  • #是否slave
  • slave=no
  • #启动权限
  • setgid=pdns
  • setuid=pdns
  • #打印日志
  • log-dns-details=yes
  • log-dns-queries=no
  • loglevel=6
  • log-timestamp=yes
  • logging-facility=0
  • #开启api
  • api=yes
  • api-key=dnsadmin1syn
  • #启动webserver 监控
  • webserver=yes
  • webserver-address=0.0.0.0
  • webserver-allow-from=0.0.0.0/0
  • webserver-port=8081
  • #监听的地址端口
  • local-address=0.0.0.0
  • local-port=54
  • #记录query 日志
  • query-logging=yes

pdns-recursor 递归解析

  • vim /etc/pdns-recursor/recursor.conf
  • #允许访问的地址
  • allow-from=0.0.0.0/0
  • #开启日志
  • disable-syslog=yes
  • #关闭dnssec 转发有用
  • dnssec=off
  • #forward-zones是只转发,不递归 少用
  • #forward-zones=hexug.com=127.0.0.1:54
  • #forward-zones-recurse是找不到就递归,找的到就转发,用逗号分隔 这里是将pdns中定义的域名,转发到pdns服务的54端口上
  • forward-zones-recurse=test.com=127.0.0.1:54,abc.com=127.0.0.1:54,.=114.114.114.114
  • #绑定在所有端口商
  • local-address=0.0.0.0
  • local-port=53
  • log-common-errors=yes
  • security-poll-suffix=
  • setgid=pdns-recursor
  • setuid=pdns-recursor

启动服务并且设置为开机启动

  • sudo systemctl start pdns
  • sudo systemctl start pdns-recursor
  • sudo systemctl enable pdns
  • sudo systemctl enable pdns-recursor

WEB管理界面 phpDNSadmin

源码Github地址
PowerDNS-Admin-0.4.2.zip 下载地址

部署的话直接用的宝塔python项目部署的。就不介绍了。