当前位置: 首页 > news >正文

Linux系统远程操作和程序编译

一、远程登陆

1.Ubuntu网络配置

更改为桥接模式
![[Pasted image 20250619191402.png]]

终端中使用ifconfig指令
修改Ubuntu网络配置文件:sudo nano /etc/network/interfaces
添加:
auto lo
iface lo inet loopback
auto ens33
iface ens33 inet static
address 192.168.43.109
netmask 255.255.255.0
gateway 192.168.43.1
指令:sudo nano /etc/resolv.conf
添加:
nameserver 192.168.43.1
![[Pasted image 20250619191825.png]]

2.创建用户

代码:
sudo useradd -m user -s /bin/bash
sudo passwd user
sudo adduser user sudo
sudo nano /etc/sudoers

3.ssh安装

代码:
sudo apt install ssh
ps -e | grep ssh

4.putty远程登陆

![[Pasted image 20250619192218.png]]

5.树莓派创建新用户

代码
sudo useradd -m -s /bin/bash user
passwd user
sudo nano /etc/sudoers

6.树莓派上开启ftp服务

下载vsftpd:
sudo apt-get install vsftpd
修改配置文件:
cd /etc/
sudo gedit vsftpd.conf
write enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
重启服务:
sudo service vsftpd restart

7.Windows使用ftp进行操作

在终端中连接树莓派指令:ftp +树莓派ip
上传文件:
lcd (主机路径)
cd (树莓派目录)
put (文件路径)
下载:
get (文件名)

8.VNC

ubuntu安装VNC server:apt-cache search vncserver
![[Pasted image 20250619193459.png]]

安装:sudo apt-get install vnc4server
![[Pasted image 20250619193639.png]]

报错解决:sudo apt-get update
![[Pasted image 20250619193721.png]]

配置VNCserver:sudo nano /home/lyy/.vnc/xstartup
![[Pasted image 20250619194011.png]]

Windows VNC viewer安装登陆
![[Pasted image 20250619194217.png]]

![[Pasted image 20250619194252.png]]

二、talk程序

代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

#define BUFFER_SIZE 1024

int main() {
int parent_to_child[2]; // 父进程写,子进程读
int child_to_parent[2]; // 子进程写,父进程读
pid_t pid;
char buffer[BUFFER_SIZE];

// 创建两个管道
if (pipe(parent_to_child) == -1 || pipe(child_to_parent) == -1) {perror("pipe");exit(EXIT_FAILURE);
}// 创建子进程
pid = fork();
if (pid == -1) {perror("fork");exit(EXIT_FAILURE);
}if (pid > 0) {  // 父进程close(parent_to_child[0]);  // 关闭父进程不用的读端close(child_to_parent[1]);  // 关闭父进程不用的写端printf("父进程(进程ID: %d)已启动,输入'exit'退出\n", getpid());while (1) {// 父进程发送消息printf("父进程> ");fgets(buffer, BUFFER_SIZE, stdin);buffer[strcspn(buffer, "\n")] = '\0';  // 去掉换行符if (strcmp(buffer, "exit") == 0) {write(parent_to_child[1], buffer, strlen(buffer) + 1);break;}write(parent_to_child[1], buffer, strlen(buffer) + 1);// 父进程接收消息int nbytes = read(child_to_parent[0], buffer, BUFFER_SIZE);if (nbytes <= 0) {break;}printf("子进程说: %s\n", buffer);if (strcmp(buffer, "exit") == 0) {break;}}close(parent_to_child[1]);close(child_to_parent[0]);wait(NULL);  // 等待子进程结束printf("父进程退出\n");
} else {  // 子进程close(parent_to_child[1]);  // 关闭子进程不用的写端close(child_to_parent[0]);  // 关闭子进程不用的读端printf("子进程(进程ID: %d)已启动,输入'exit'退出\n", getpid());while (1) {// 子进程接收消息int nbytes = read(parent_to_child[0], buffer, BUFFER_SIZE);if (nbytes <= 0) {break;}printf("父进程说: %s\n", buffer);if (strcmp(buffer, "exit") == 0) {break;}// 子进程发送消息printf("子进程> ");fgets(buffer, BUFFER_SIZE, stdin);buffer[strcspn(buffer, "\n")] = '\0';  // 去掉换行符if (strcmp(buffer, "exit") == 0) {write(child_to_parent[1], buffer, strlen(buffer) + 1);break;}write(child_to_parent[1], buffer, strlen(buffer) + 1);}close(parent_to_child[0]);close(child_to_parent[1]);printf("子进程退出\n");exit(EXIT_SUCCESS);
}return 0;

}
结果:
![[Pasted image 20250619195211.png]]

三、OpenCV

1.安装OpenCV

unzip opencv-4.11.0.zip
cd opencv-4.11.0
sudo su
sudo apt-get update
sudo apt-get install cmake
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev
![[Pasted image 20250619200947.png]]

mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local …
sudo make
sudo make install

![[Pasted image 20250619201340.png]]

![[Pasted image 20250619201403.png]]

配置环境:
sudo gedit /etc/ld.so.conf.d/opencv.conf
sudo ldconfig
sudo gedit /etc/bash.bashrc
![[Pasted image 20250619201728.png]]

source /etc/bash.bashrc

2.text1.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;iheight;i++)
for (int j = 0;jwidth;j++) {
double dx = (double)(j - center.x) / center.x;
double dy = (double)(i - center.y) / center.y;
double weight = exp((dxdx + dydy)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;
}

编译命令:gcc test1.cpp -o test1 pkg-config --cflags --libs opencv
pkg-config是一个帮助查询已安装库信息的工具。
–cflags获取编译时需要的标志,包括头文件路径和其他编译选项。
–libs获取链接时需要的标志,包括:库文件路径
当执行该命令时:系统会查找OpenCV的.pc配置文件并从配置文件中读取头文件路径、库文件路径和依赖关系,再输出完整的编译和链接选项

Makefile:
CXX := g++
CXXFLAGS := -std=c++11 -Wall
OPENCV := $(shell pkg-config --cflags --libs opencv4 2>/dev/null || pkg-config --cflags --libs opencv)

SRC_DIR := src
BUILD_DIR := build
TARGET := $(BUILD_DIR)/test1
SRCS := $(wildcard $(SRC_DIR)/*.cpp)
OBJS := $(patsubst ( S R C D I R ) / (SRC_DIR)/%.cpp, (SRCDIR)/(BUILD_DIR)/%.o,$(SRCS))

all: $(BUILD_DIR) $(TARGET)
$(TARGET): $(OBJS)
$(CXX) $(CXXFLAGS) $^ -o $@ $(OPENCV)
$(BUILD_DIR):
mkdir -p $(BUILD_DIR)
clean:
rm -rf $(BUILD_DIR)
run: ( T A R G E T ) . / (TARGET) ./ (TARGET)./(TARGET) your_image.jpg
.PHONY: all clean run

CMake:
cmake_minimum_required(VERSION 3.5)
project(OpenCV_Test CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(OpenCV REQUIRED)
message(STATUS “OpenCV library status:”)
message(STATUS " version: ${OpenCV_VERSION}“)
message(STATUS " libraries: ${OpenCV_LIBS}”)
message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}")
add_executable(test1 src/test1.cpp)
target_link_libraries(test1 ${OpenCV_LIBS})
install(TARGETS test1 DESTINATION bin)

http://www.lqws.cn/news/446671.html

相关文章:

  • JS红宝书笔记 - 8.1 理解对象
  • 零基础指南:利用Cpolar内网穿透实现Synology Drive多端笔记同步
  • PHP 生成当月日期
  • 解决 Docker 里 DrissionPage 无法连接浏览器的问题,内含直接可用的Docker镜像(DrissionPage 浏览器链接失败 怎么办?)
  • 23种设计模式--简单工厂模式理解版
  • 日本生活:日语语言学校-日语作文-沟通无国界(3)-题目:わたしの友達
  • 基于 Web 的 3D 设计工具Spline介绍
  • 理解服务注册与发现
  • DeserializationViewer使用说明
  • java IO流
  • Git vs Perforce P4:版本控制系统选型指南(附适用场景、团队类型)
  • 【嵌入式】鲁班猫玩法大全
  • LVDS接口
  • 华为网路设备学习-25(路由器OSPF - 特性专题 二)
  • vscode设置代码字体
  • repo 工具
  • 行业热点丨手机中框设计如何体现增材思维?
  • 计算机导论期末快速复习指南
  • “本地化思维+模块化体验”:一款轻量数据中心监控系统的真实测评
  • 软件测试基础知识(一)
  • StableDiffusion实战-手机壁纸制作 第一篇:从零基础到生成艺术品的第一步!
  • API 接口:程序世界的通用语言与交互基因
  • 据字典是什么?和数据库、数据仓库有什么关系?
  • 《中国棒垒球》奥运会金牌排名·棒球1号位
  • 2025 渗透工具:【中国蚁剑】连接一句话MUA文件 远控虚拟机靶机
  • Web 应用防火墙(WAF)工作原理、防护策略与部署模式深度剖析
  • Spring-创建第一个SpringBoot项目
  • Flutter中FutureBuilder和StreamBuilder
  • 解决Vue再浏览器的控制台中更新属性不生效
  • C++实现手写strstr函数