标签 linux 下的文章

教程 | 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安装成功。

C++ | Linux下源码编译VTK6.1


背景

occ需要vtk依赖。

过程

  1. 添加cmake配置,c++标注指定11的版本

CMAKE_CXX_STANDARD 11

  1. 修改CMake文件,让其使用更高版本的gcc
    这边gcc版本为11.4的,所以3或4开头的需要修改11开头

CMake/GenerateExportHeader.cmake内的169行
CMake/vtkCompilerExtras.cmake内的30行
[34]修改成[0-9]+

  1. 修复error: ‘GLintptr’ has not been declared等报错
    /usr/include/GL/glxext.h文件先备份一下

sudo cp /usr/include/GL/glxext.h /usr/include/GL/glxext.h.bak

在此文件的474行添加下边两句话

typedef ptrdiff_t GLsizeiptr;
typedef ptrdiff_t GLintptr;
  1. 编译及安装make -j8 && make install

Linux | Python3.10.13源码编译安装


需求

最近再适配统信的机器,但是统信的源里的软件都不是最新的,python最高版本就能支持到3.7。然而这边的三方需要的python版本是3.10的,而且需要dev版本,就需要自己重新编译了。

基础依赖环境安装

sudo apt install libffi-dev tcl-dev tk-dev libbz2-dev zlib1g-dev libsqlit3-dev libxml2-dev libssl-dev libxslt1-dev liblzma-dev libreadline-dev llvm libncurses5-dev libncursesw5-dev xz-utils libgdbm-dev libncurses-dev

编译及安装

cas_user@casuser:/data/home/cas_user/code/$ tar -zxvf Python-3.10.13.tgz  # 解压
cas_user@casuser:/data/home/cas_user/code/$ cd Python-3.10.13
cas_user@casuser:/data/home/cas_user/code/Python-3.10.13$ ./configure --prefix=/home/user/python_install_path --enable-shared CFLAGS=-fPIC  # 配置参数
cas_user@casuser:/data/home/cas_user/code/Python-3.10.13$ make -j8 && sudo make install  # 编译及安装

配置参数解析

配置项解释
--prefix=path指定安装目录
--enable-shared生成.so动态库
CFLAGS=-fPIC编译选项
--enable-optimizations启用优化

其他参数以后补充。


Linux: 统信的机子输入密码进入不了界面。。


问题

同事说有一台统信(UOS)的机子输入密码进不去界面了。之前就发生过此问题,以为跟一个缺qt库一样的问题。一查看,并不是想象的那样。因为缺qt库的情况是输入密码的界面也会直接卡死没有。这个问题不一样,有输入密码的界面,而且密码输入正确,会无限次输入密码,而且提示了输入正确。
微信图片_20230426074845.jpg

解决过程

Ctrl+Alt+F2进入命令行模式

尝试着在命令行里重启以下桌面,会提示【QXcbConnection: Could not connect to display】,这个问题个之前的统信缺库就不一样的,那只好百度以下。

# 输入账号密码进入命令行
cas_user@casuser-PC:/$ dde-desktop
qt.qpa.screen: QXcbConnection: Could not connect to display
Could not connect ot any X display.
cas_user@casuser-PC:/$

百度出来的解决办法

首先

vim ~/.bashrc
然后在里面添加

export QT_QPA_PLATFORM='offscreen'
即时生效

source ~/.bashrc
这样就可以额

每次修改.bashrc后,使用source ~/.bashrc(或者 . ~/.bashrc)就可以立刻加载修改后的设置,使之生效。
一般会在.bash_profile文件中显式调用.bashrc。登陆linux启动bash时首先会去读取~/.bash_profile文件,这样~/.bashrc也就得到执行了,你的个性化设置也就生效了。

` 其过程就是首先其次再然后。

准备处理

cas_user@casuser-PC:/$ cd ~
cas_user@casuser-PC:/$
# 然后发现居然进不去自己的目录
cas_user@casuser-PC:/$ cd /home && ls -al
cas_user@casuser-PC:/$
总用量 16
drwxr-xr-x  4 root     root     4096 4月  11 19:18 .
drwxr-xr-x 25 root     root     4096 4月  20 03:08 ..
drwxr-x--- 27 root     root     4096 4月  26 07:19 cas_user  # ? 权限咋都是root?
drwxr-xr-x  3 root     root     4096 4月  20 16:59 highgo
cas_user@casuser-PC:/home$ sudo chown cas_user:cas_user cas_user -R
请输入密码:
验证成功
cas_user@casuser-PC:/home$ ls -al
总用量 16
drwxr-xr-x  4 root     root     4096 4月  11 19:18 .
drwxr-xr-x 25 root     root     4096 4月  20 03:08 ..
drwxr-x--- 27 cas_user cas_user 4096 4月  26 07:19 cas_user  # 这回权限才对啊
drwxr-xr-x  3 root     root     4096 4月  20 16:59 highgo

就这么发现问题了,由于用户自己的目录权限变成了root,导致的界面访问不到相关的配置文件导致的进不了页面。那就不用百度的方法了啊。。。。

找找问题是出自哪里

cas_user@casuser-PC:/home$ sudo su
请输入密码:
验证成功
root@casuser-PC:/home# history
···
373  chown -R root:root /home/cas_user
···

???这谁受得了啊,说实话这命令跟rm /* -rf 可能没啥区别,所以我建议尽可能的别用root权限,真的很容易出现问题。


Linux: 编译安装Python指定版本


描述

需要一个指定版本的python,而且需要源码编译。这里用的是3.8.9,不同版本的编译大同小异。

下载指定python版本

python下载地址python38

解压并进入目录

tar xvf python-3.8.9.tar.xz
cd Python-3.8.9

配置及编译

./configure --enable-shared --enable-optimizations --prefix=/home/ciomp/public/python38
make
make install

查看结果

屏幕截图 2023-04-18 150608.png