您的位置:首页 > 新闻 > 热点要闻 > 3d建模师_dw网页制作下载_新闻最近的大事10件_互联网营销顾问是做什么的

3d建模师_dw网页制作下载_新闻最近的大事10件_互联网营销顾问是做什么的

2025/6/4 16:42:41 来源:https://blog.csdn.net/m0_74749526/article/details/147191867  浏览:    关键词:3d建模师_dw网页制作下载_新闻最近的大事10件_互联网营销顾问是做什么的
3d建模师_dw网页制作下载_新闻最近的大事10件_互联网营销顾问是做什么的

目录

一、Linux远程终端登录、图形桌面访问、 X图形窗口访问和FTP文件传输操作

1.1 桥接模式

1.2 putty远程登录Ubuntu

1.3 win10远程登录并上传下载文件

1.4 X server仿真软件安装

1.5 树莓派在putty上的远程登录

1.6 使用ftp远程登录并实现文件上传下载

1.7 Linux下的图形界面软件使用(Xming、Putty)

1.7.1 Xming下载与安装

1.7.2 Xming和Putty配置

1.7.3 通过Putty进行图像界面软件的运行

二、阿里云服务器运行Talk程序

2.1 在阿里云服务器上登录后,运行talk程序与其他用户进行文字聊天

2.2 然后自己用c语言写一个linux进程之间通信(聊天)的简单程序

三、ubuntu下OpenCV图像显示

3.1 下载安装

3.1.1 下载安装包并解压

3.1.2 使用 cmake安装opencv

3.1.3 使用make创建并编译安装

3.1.4 配置环境

3.2 打开图片进行特效显示

3.2.1 示例图片

3.2.2 具体过程

3.2.3 相关问题

四、总结


一、Linux远程终端登录、图形桌面访问、 X图形窗口访问和FTP文件传输操作

1.1 桥接模式

将虚拟机Ubuntu系统的网络连接设置为“桥接模式”,并配置Ubuntu的IP、网关参数,保证其他同学的win10系统能够ping通你的Ubuntu;在Ubuntu和树莓派上分别用 sudo adduser添加2个用户名classmate1,、classmate2,密码均为123456;

(1)设置桥接模式

Win10主机的网络查看:ipconfig

(2)配置Ubantu的网络参数:使用静态ip配置

sudo nano /etc/netplan/01-netcfg.yaml

保存文件并运行以下命令应用配置:

使用另一台电脑使用ping命令观察是否成功:

(3)添加用户

(4)安装ssh服务

sudo apt update
sudo apt install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh

1.2 putty远程登录Ubuntu

让同学使用创建账号在win10下用putty或xshell等远程登录你的Ubunt系统(注意要打开SSH服务);

这里我们使用Putty连接虚拟机

(1)打开Putty输入自己的虚拟机的IP地址,port选为22。随后点击Open进行访问。

(2)进入终端,使用我们创建的账号进入虚拟机

1.3 win10远程登录并上传下载文件

让同学在win10下用 ftp或xshel等软件l远程登录你的Ubunt系统,上传和下载文件(注意要打开SSH服务);

我们使用FileZilla

输入完主机、用户名、密码、端口号等信息之后,连接,随后在左侧选择要上传的文件夹即可

1.4 X server仿真软件安装

在客户端windows下安装X server仿真软件(这里我们使用免费软件 Xming), 以及终端软件,这次实验采用 putty。

安装好之后打开让它在后台运行。

(1)打开PuTTY,进入Connection→SSH→Auth→X11 forwarding并勾选,然后使用classmate1访问虚拟机

(2)输入指令连接windows系统:

set DISPLAY=xxx.xxx.xxx.xxx:0

(3)输入命令打开windows下载的Xing:

gedic

(4)打开火狐浏览器:

1.5 树莓派在putty上的远程登录

1.Putty的下载与安装

进入Putty官网下载:Download PuTTY: latest release (0.83)

双击安装文件,自定义安装路径,然后一直NExt到安装完成,点击finish

双击Putty图标文件,进入主界面

2.树莓派的远程登录

关于树莓派环境的配置,和如何创建多个用户,可以看我之前写的这个博客:
安装树莓派3B+环境-CSDN博客

接下来我们在另一台同子网下的主机进行对应操作。

在框中对应输入树莓派的IP地址,(注意选择SSH服务),点击Open连接,若跳出下图界面,选择Accept,输入用户名和密码。

1.6 使用ftp远程登录并实现文件上传下载

在电脑命令行中使用ssh命令登录树莓派

1.vsftpd的下载

输入以下命令下载vsftpd:sudo apt-get install vsftpd

2.修改配置文件

输入以下命令进入文件vsftpd.v并对应将图片中圈出的语句前的#删掉

cd /etc/
sudo nano vsftpd.conf

3.重新启动服务

sudo service vsftpd restart

4.ftp远程登录树莓派

打开cmd命令行

输入ftp <树莓派的IP地址>然后对应输入用户名和密码进行登录

4.文件上传

首先我们在电脑中找到我们要上传的文件路径

然后我们在命令行中写入下面代码

mkdir week8 //新建文件夹,用于存放待会上传的文件
ls  //查看所有文件夹,可以看见我们新创建的week8
cd week8  //打开week8文件夹
lcd E:\  //进入本地目录中,LCD 后面跟自己文件所在的目录
put helloworld.c //将helloworld.c文件上传至该文件夹中

通过ls命令我们可以查看该文件是否上传成功

可以看到文件已经成功上传。

5.文件下载

输入下面命令

lcd D:\ //进入本地目录D盘
get helloworld.c  //下载helloworldworld.c文件,多个文件下载使用mget

我们可以在D盘中找到该文件

1.7 Linux下的图形界面软件使用(Xming、Putty)

1.7.1 Xming下载与安装

Xming官网下载地址:https://sourceforge.net/projects/xming/

分别下载Xming和其字体包

自行选择对应的目录安装,确保选中"Xming Font Server",我直接默认配置安装的。

1.7.2 Xming和Putty配置

1.Xming的配置

打开XLaunch出现如下界面,选择"Multiple windows",Display number设为0,勾选"No Access Control",其他保持默认

完成后可看见Xming在后台运行

2.Putty配置

(1)打开PuTTY,在Session中输入:

Host Name: 树莓派/Ubuntu服务器的IP地址,Port: 22(默认SSH端口)

(2)配置X11转发:

Connection > SSH > X11,勾选"Enable X11 forwarding",X display location设为"localhost:0"

点击Open建立连接,输入用户名和密码登录

如果正确配置了PuTTY的X11转发,不需要手动设置DISPLAY变量。SSH连接会自动设置正确的DISPLAY环境变量

可以通过以下命令验证:

echo $DISPLAY

若没有,可以通过以下命令进行DISPLAY环境配置

set DISPLAY=<电脑IP地址>:0

3.测试图形程序

输入以下命令进行测试:

# 测试简单图形程序

xeyes 

1.7.3 通过Putty进行图像界面软件的运行

1.图形界面文件的打开

首先通过VNC远程登录到树莓派系统桌面

由于博主之前已经配置好桌面系统环境,这里就不赘述了,没下载VNC的可以看这个博客:树莓派3b:环境配置,VNC远程控制并进行简单代码运行_树莓派vnc-CSDN博客

输入以下命令打开对应的图形界面

gedit <文件名>

若没下载gedit,可以通过下面命令进行下载

sudo apt update
sudo apt install gedit -y

可以在桌面系统看见helloworld.c文件已经被打开

2.图形界面软件的打开

输入以下命令:

firefox

若出现以下报错,其为 Firefox 在树莓派上运行时无法检测到 GPU 加速支持,导致图形渲染问题。

我们通过以下命令安装缺失的图形库:

sudo apt install libgl1-mesa-dri libgl1-mesa-glx -y

然后我们重新运行Firefox,就可以出现如下界面

总结思考

1、 X窗口协议与远程桌面VNC-viewer协议有什么差异?

X窗口系统(X Window System,简称X11)和VNC(Virtual Network Computing)是两种不同的远程图形界面技术,它们在设计原理、通信方式和使用场景上有显著差异。

(1)基本概念

X窗口协议

设计目标:提供网络透明的图形显示服务,允许应用程序(客户端)在远程运行,而图形界面(服务端)在本地显示。

核心思想:分离应用程序逻辑和图形渲染,支持分布式图形计算。

典型应用:Linux/Unix系统下的图形程序远程运行(如通过SSH -X转发)。

VNC

设计目标:实现完整的远程桌面控制,将远程主机的屏幕画面传输到本地,并允许本地操作。

核心思想:传输屏幕像素变化,实现“所见即所得”的远程操作。

典型应用:跨平台远程桌面管理(如Windows远程协助、服务器维护)。

(2)协议架构

X窗口协议

客户端-服务器模型:

X Server:运行在本地,负责显示图形和接收输入(如键盘、鼠标)。

X Client:运行在远程的应用程序(如Firefox、MATLAB)。

通信方式:传输绘图指令(如“画线”“填充颜色”),而非像素数据。

网络端口:默认端口6000+(如DISPLAY=:0对应6000)。

VNC

服务器-客户端模型:

VNC Server:运行在远程主机,捕获屏幕像素并发送给客户端。

VNC Viewer:运行在本地,接收像素数据并发送输入事件(如鼠标点击)。

通信方式:传输压缩的屏幕像素(类似视频流)。

协议:基于RFB(Remote Framebuffer Protocol),默认端口5900+。

(3)性能与效率

对比项X窗口协议VNC
贷带宽需求低(传输指令)高(传输像素,依赖压缩算法)
延迟低(适合交互式应用)较高(频繁画面更新时可能卡顿)
适用场景单个图形应用远程运行完整桌面远程控制

(4)安全性

对比项X窗口协议VNC
原生加密无(需SSH隧道保护)支持SSL/TLS加密(如TigerVNC)
认证方式xauth或IP限制(较弱)密码/密钥认证

(5)使用场景

X窗口协议的适用场景

在本地显示远程Linux服务器上的图形程序(如通过ssh -X运行Wireshark)。

开发调试分布式图形应用(如科学计算可视化)。

VNC的适用场景

远程控制完整的桌面环境(如Windows远程桌面替代方案)。

跨平台支持(Windows/macOS/Linux均可作为服务端或客户端)。

(6)典型工具

协议 服务端工具 客户端工具

X窗口协议: 内置(Linux/Unix系统) Xming(Windows)、XQuartz(macOS)

VNC :TigerVNC/RealVNC Server Remmina/VNC Viewer

2、你会发现新建的账号无法使用sudo命令,请问如何解决这个问题?

在 Ubuntu 中,新建的用户无法使用 sudo命令是因为该用户未被添加到 sudo用户组(或 /etc/sudoers 文件中未授权)。我们可以通过root账户操作:

切换到root用户:

su - root

sudo - i

将新用户添加到sudo组:

usermod -aG sudo 新用户名

验证是否生效:

groups 新用户名

二、阿里云服务器运行Talk程序

在阿里云服务器上使用XTerminal登录后,可以运行各种命令来管理服务器或与服务器上的其他用户进行交互。

2.1 在阿里云服务器上登录后,运行talk程序与其他用户进行文字聊天

(1)登录阿里云服务器

(2)输入以下命令查看当前登录用户的终端

who

(3)输入以下命令启动聊天

talk

(4)等待对方连接

(5)对方收到请求,回应【talk 用户名】

talk 用户名

至此,Talk成功启动

2.2 然后自己用c语言写一个linux进程之间通信(聊天)的简单程序

要进行Talk的双方一个运行socket_client.c ,另一个运行 socket_server.c

socket_client.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <pthread.h>#define BUFFER_SIZE 1024void *receive_messages(void *arg) {int sock = *((int *)arg);char buffer[BUFFER_SIZE];int bytes_read;while (1) {bytes_read = read(sock, buffer, BUFFER_SIZE);if (bytes_read <= 0) {printf("Server disconnected\n");exit(EXIT_SUCCESS);}buffer[bytes_read] = '\0';printf("\nReceived: %s", buffer);printf("Enter message (or 'exit' to quit): ");fflush(stdout);}return NULL;
}int main(int argc, char const *argv[]) {if (argc != 2) {printf("Usage: %s <server_ip>\n", argv[0]);exit(EXIT_FAILURE);}int sock = 0;struct sockaddr_in serv_addr;char buffer[BUFFER_SIZE] = {0};pthread_t thread_id;// 创建socketif ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {perror("socket creation error");exit(EXIT_FAILURE);}serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(8080);// 将IP地址从字符串转换为二进制形式if (inet_pton(AF_INET, argv[1], &serv_addr.sin_addr) <= 0) {perror("invalid address");exit(EXIT_FAILURE);}// 连接服务器if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {perror("connection failed");exit(EXIT_FAILURE);}printf("Connected to server at %s\n", argv[1]);// 创建接收消息的线程if (pthread_create(&thread_id, NULL, receive_messages, (void *)&sock) < 0) {perror("could not create thread");exit(EXIT_FAILURE);}// 主线程处理发送消息printf("Enter message (or 'exit' to quit): ");while (fgets(buffer, BUFFER_SIZE, stdin)) {if (strncmp(buffer, "exit", 4) == 0) {write(sock, "Client exiting...", 17);break;}write(sock, buffer, strlen(buffer));printf("Enter message (or 'exit' to quit): ");}close(sock);return 0;
}

socket_server.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <pthread.h>#define PORT 8080
#define BUFFER_SIZE 1024void *handle_client(void *arg) {int client_socket = *((int *)arg);char buffer[BUFFER_SIZE];int bytes_read;while (1) {bytes_read = read(client_socket, buffer, BUFFER_SIZE);if (bytes_read <= 0) {break;}buffer[bytes_read] = '\0';printf("Received: %s", buffer);printf("Enter reply (or 'exit' to quit): ");fgets(buffer, BUFFER_SIZE, stdin);if (strncmp(buffer, "exit", 4) == 0) {write(client_socket, "Server exiting...", 17);break;}write(client_socket, buffer, strlen(buffer));}close(client_socket);pthread_exit(NULL);
}int main() {int server_fd, client_socket;struct sockaddr_in address;int opt = 1;int addrlen = sizeof(address);pthread_t thread_id;// 创建socket文件描述符if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {perror("socket failed");exit(EXIT_FAILURE);}// 设置socket选项if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {perror("setsockopt");exit(EXIT_FAILURE);}address.sin_family = AF_INET;address.sin_addr.s_addr = INADDR_ANY;address.sin_port = htons(PORT);// 绑定socket到端口if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {perror("bind failed");exit(EXIT_FAILURE);}// 开始监听if (listen(server_fd, 3) < 0) {perror("listen");exit(EXIT_FAILURE);}printf("Server started on port %d. Waiting for connections...\n", PORT);while (1) {// 接受新连接if ((client_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {perror("accept");continue;}printf("New connection from %s\n", inet_ntoa(address.sin_addr));// 为每个客户端创建新线程if (pthread_create(&thread_id, NULL, handle_client, (void *)&client_socket) < 0) {perror("could not create thread");continue;}// 分离线程,使其结束后自动释放资源pthread_detach(thread_id);}close(server_fd);return 0;
}

在服务器和客户端机器上分别编译:

服务器端

gcc socket_server.c -o server -lpthread 

客户端

gcc socket_client.c -o client -lpthread

接下来我们进行通讯尝试:

在服务器机器上启动服务器程序:

./server

在客户端机器上启动客户端程序,指定服务器IP地址:

./client <服务器IP地址>

三、ubuntu下OpenCV图像显示

编写一个打开图片进行特效显示的代码 test1.cpp

3.1 下载安装

3.1.1 下载安装包并解压

下载安装资源压缩包

将下载好的压缩包opencv-3.4.11放在主目录文件夹下

解压缩(打开虚拟机终端,输入命令 unzip opencv-3.4.11.zip)

unzip opencv-3.4.11.zip

解压缩以后主目录文件夹如下:

进入到解压后的文件夹中

cd opencv-3.4.11

3.1.2 使用 cmake安装opencv

(1)首先进入 root 用户,并更新一下

sudo su
sudo apt-get update

(2)执行以下命令安装 cmake

sudo apt-get install cmake

这里直接按enter键默认继续安装

(3)cmake安装完成

(4)安装依赖库

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev  

(5)创建build文件夹,进入build文件夹

(6)使用cmake 编译参数

cmake ..

运行结果如下:

3.1.3 使用make创建并编译安装

(1)在build文件夹下进行

输入以下命令

sudo make

(2)编译完成

(3)安装

输入以下命令

sudo make install

(4)安装完成

3.1.4 配置环境

(1)修改 opencv.conf文件,打开后的文件是空的,添加opencv库的安装路径:/usr/local/lib

输入以下命令

sudo gedit /etc/ld.so.conf.d/opencv.conf 

输入路径/usr/local/lib 并保存,记得点小叉叉退出文件编辑界面

出现警告是正常的

(2)更新系统共享链接

sudo ldconfig

(3)配置bash,修改 bash.bashrc 文件

输入以下命令

sudo gedit /etc/bash.bashrc

(4)在文件末尾加入

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

(5)然后执行以下命令使得配置生效

source /etc/bash.bashrc 

(6)输入以下命令更新

sudo updatedb

我输入之后显示找不到命令,好像是之前有个软件包没安装成功

解决方法:

运行以下命令安装 mlocate软件包

sudo apt-get update
sudo apt-get install mlocate

手动运行 updatedb

sudo updatedb

(7)查看 opencv 的版本信息

如下图所示,说明安装成功

3.2 打开图片进行特效显示

3.2.1 示例图片

3.2.2 具体过程

(1)新建文件夹code

输入以下命令创建新的文件夹

mkdir code
cd code

(2)新建文件 test1.cpp

输入以下命令新建 test1.cpp 文件

vim test1.cpp

(3)test1.cpp代码

#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{CvPoint center;double scale = -3; IplImage* image = cvLoadImage("lena.jpg");argc == 2? cvLoadImage(argv[1]) : 0;cvShowImage("Image", image);if (!image) return -1;  center = cvPoint(image->width / 2, image->height / 2);for (int i = 0;i<image->height;i++)for (int j = 0;j<image->width;j++) {double dx = (double)(j - center.x) / center.x;double dy = (double)(i - center.y) / center.y;double weight = exp((dx*dx + dy*dy)*scale);uchar* ptr = &CV_IMAGE_ELEM(image, uchar, i, j * 3);ptr[0] = cvRound(ptr[0] * weight);ptr[1] = cvRound(ptr[1] * weight);ptr[2] = cvRound(ptr[2] * weight);}Mat src;Mat dst;src = cvarrToMat(image);cv::imwrite("test.png", src);cvNamedWindow("test",1);    imshow("test", src);cvWaitKey();return 0;
}

输入代码以后,按Esc 输入 :wq保存退出

vim修改代码,按i进入插入模式;按Esc再输入 :wq 保存并退出

(4)把图片粘贴到code目录下

(5)编译 test1.cpp 文件

g++ test1.cpp -o test `pkg-config --cflags --libs opencv`

(6)运行

输入以下命令运行

./test

运行结果

3.2.3 相关问题

1、 gcc test1.cpp -o test1 pkg-config --cflags --libs opencv这条编译命令,是如何获得opencv头文件、链接lib库文件的路径的?

命令解析:
gcc:GNU 编译器,用于编译 C/C++ 程序。
test1.cpp:源代码文件,包含 OpenCV 的代码。
-o test1:指定输出的可执行文件名称为 test1。
`pkg-config --cflags --libs opencv`:这是一个子命令用于,动态获取 OpenCV 的编译和链接参数。
pkg-config:一个工具,用于查询已安装库的编译和链接参数。
--cflags:获取 OpenCV 的头文件路径(-I 参数)。
--libs:获取 OpenCV 的库文件路径(-L 参数)和库名称(-l 参数)。

(1)pkg-config --cflags --libs opencv 会返回 OpenCV 的头文件路径和库文件路径,例如:

-I/usr/local/include/opencv4 -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui ...

(2)这些参数会被传递给 gcc,确保编译器能够找到 OpenCV 的头文件和库文件。

2、改用make+makefile方式编译 上述程序(用变量命名格式写makefile文件,并包括 clean选项)

将以下内容保存为 Makefile 文件,放在 code 目录下

# 定义变量
CXX = g++
CXXFLAGS = `pkg-config --cflags opencv`
LDFLAGS = `pkg-config --libs opencv`
SRC = test.cpp
OBJ = test.o
TARGET = test
​
# 默认目标
all: $(TARGET)
​
# 编译规则
$(TARGET): $(OBJ)$(CXX) $(CXXFLAGS) $(LDFLAGS) -o $(TARGET) $(OBJ)
​
# 生成对象文件
$(OBJ): $(SRC)$(CXX) $(CXXFLAGS) -c $(SRC) -o $(OBJ)
​
# 清理
clean:rm -f $(OBJ) $(TARGET)

在终端运行以下命令

cd ~/code
make

运行程序

./test

清理编译文件

make clean

3、用cmake方式进行编译

将以下内容保存为 CMakeLists.txt 文件,放在 ~/code 目录下:

# CMake 最低版本要求
cmake_minimum_required(VERSION 3.10)
​
# 项目名称
project(OpenCVTest)
​
# 查找 OpenCV
find_package(OpenCV REQUIRED)
​
# 添加可执行文件
add_executable(test test.cpp)
​
# 链接 OpenCV 库
target_link_libraries(test ${OpenCV_LIBS})

(1)在 ~/code 目录下创建一个构建目录并进入:

cd ~/code
mkdir build
cd build

(2)运行 cmakemake

cmake ..
make

编译完成后,可执行文件 test 会生成在 build 目录中

(3)运行程序

./test

(4)清理

删除 build 目录

rm -rf ~/code/build

4、对比总结

方式优点适用场景
直接 gcc简单快速单文件小项目
Makefile支持多文件、变量管理、增量编译中小型项目
CMake跨平台、自动检测依赖、适合大型项目大型或跨平台项目

四、总结

本次学习围绕Linux系统的远程操作和图像处理展开。通过学习,了解到了Linux系统的远程终端登录、图形桌面访问、文件传输以及OpenCV图像处理等技术。在远程操作部分,配置了Ubuntu虚拟机的网络连接为桥接模式,通过创建用户并开启SSH服务,和同学实现了Putty和Xshell远程登录到我的Ubuntu和树莓派系统,完成了文件的上传和下载操作。在OpenCV图像处理部分,成功安装了OpenCV库,并编写了一个简单的图像程序,用gcc、Makefile和CMake进行编译,了解了第三方库的使用和编译流程。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com