Linux系统远程操作和程序编译
一、远程登陆
1.Ubuntu网络配置
更改为桥接模式
终端中使用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
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远程登陆
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
安装:sudo apt-get install vnc4server
报错解决:sudo apt-get update
配置VNCserver:sudo nano /home/lyy/.vnc/xstartup
Windows VNC viewer安装登陆
二、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;
}
结果:
三、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
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local …
sudo make
sudo make install
配置环境:
sudo gedit /etc/ld.so.conf.d/opencv.conf
sudo ldconfig
sudo gedit /etc/bash.bashrc
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)