文章目录
- 图形显示
- 窗口系统Window System
- X窗口系统
- 远程连接
- ssh命令连接
- 从本地复制到远程
- 从远程复制到本地
- nomachine远程桌面
- sudo
- 赋予用户sudo权限
- Ubuntu sudo:/usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位
- apt安装指定版本
- 查询指定软件有多少个版本
- 代理配置
- 系统代理
- Docker配置代理
- apt配置代理
- yum配置代理
- wget配置代理
- curl使用代理
- git 使用代理
- 域名无法解析问题
- AppImage应用启动报错:Cannot mount AppImage, please check your FUSE setup
- 创建桌面应用图标
- 串口
- 1.Ubuntu串口驱动安装与使用
- 1.1安装
- 1.2配置
- 1.3 使用
- 1.4 Ubuntu 查看串口,设置串口权限
- 1.5 绑定USB端口号
- Ubuntu下的串口助手cutecom
图形显示
Linux 内核本身是没有图形化界面的,所谓的图形化界面系统只不过中 Linux 下的应用程序。这一点和 Windows 不一样。Windows 从Windows 95 开始,图形界面就直接在系统内核中实现了,是操作系统不可或缺的一部分。
窗口系统Window System
窗口系统,是GUI的一种(也是当前计算机设备、智能设备广泛使用的一种),以WIMP (windows、icons、menus、pointer) 的形式,提供人机交互接口。Linux系统中有很多窗口系统的实现,如X Window System、Wayland、Android SurfaceFlinger等,虽然形态各异,但思路大致相同,包含如下要点:
- 一般都使用client-server架构,server(称作display server,或者windows server、compositor等等)管理所有输入设备,以及用于输出的显示设备。
- 应用程序作为display server的一个client,在自己窗口(window)中运行,并绘制自己的GUI。
- client的绘图请求,都会提交给display server,display server响应并处理这些请求,以一定的规则混合、叠加,最终在有限的输出资源上(屏幕),显示多个应用程序的GUI。
- display server和自己的client之间,通过某种类型的通信协议交互,该通信协议通常称作display server protocol。
- display server protocol可以是基于网络的,甚至是网络透明的(network transparent),如X Window System所使用的。也可以是其它类型的,如Android SurfaceFlinger所使用的binder。
X窗口系统
X Window System是Windowing System一种实现,其本质是一种协议,它是一个以位图显示的网络化视窗系统,广泛使用于UNIX-like的操作系统上(当然也包括Linux系统),由MIT(Massachusetts Institute of Technology,麻省理工学院)在1984年发布,X11是X Window协议的第11个版本。X Window System基于主从式模型:单一服务器控管硬件的输出入,如屏幕、键盘和鼠标;所有的应用程序都被视作客户端,用户之间透过服务器来交互。交互部分由X Window核心协议来管理。还有其它与X窗口系统有关的协议,有的建立在X Window核心协议之上的,有的是独立的协议。
X 协议由 X server 和 X client 组成:
- X server 管理主机上与显示相关的硬件设置(如显卡、硬盘、鼠标等),它负责屏幕画面的绘制与显示,以及将输入设置(如键盘、鼠标)的动作告知 X client。
- X client (即 X 应用程序) 则主要负责事件的处理(即程序的逻辑)。
举个例子,如果用户点击了鼠标左键,因为鼠标归 X server 管理,于是 X server 就捕捉到了鼠标点击这个动作,然后它将这个动作告诉 X client,因为 X client 负责程序逻辑,于是 X client 就根据程序预先设定的逻辑(例如画一个圆),告诉 X server说:“请在鼠标点击的位置,画一个圆”。最后,X server 就响应 X client 的请求,在鼠标点击的位置,绘制并显示出一个圆。
一个Linux图形界面的显示需要
- 窗口系统:一般是基于X 协议的X window system
- 窗口管理器:实现一个屏幕上显示多个X程序,实现调整窗口大小、标题栏、最大化、最小化、关闭按钮、虚拟桌面这些功能。窗口管理器是用来控管窗口整体的外观,以及其他图形化用户界面的要素。在不同的安装中,X窗口系统会有不同的外观,主要是因为使用不同的窗口管理器,或是不同的窗口管理器配置。窗口管理器维护窗口的位置、周围加上装饰性的边框、处理图标、处理鼠标对窗口外表的点击(在“幕后”)、处理按键(例如按下 ALT-F4 时,将窗口缩小成图标)等等。
- 显示管理器:显示图形化登录提示的程序。更广泛的说,显示管理器在本机电脑上执行一个或多个 X 服务器,并接受来自远程电脑上执行的 X 服务器的新连线。本机服务器借由显示管理器来启动,然后显示管理器连线到服务器,以呈现出用户登录画面。远程服务器从显示管理器独立启动并且与之连线。例如GDM(GNOME显示管理器),lightdm(由ubuntu为unity桌面系统开发)
linux图形界面系统层次关系:
linux内核 <- -> X Server <- - 通过X协议交流 - -> 窗口管理系统(综合桌面环境)<- ->X应用程序(X Client)
远程连接
ssh命令连接
scp [可选参数] file_source file_target
参数说明:
- -1: 强制scp命令使用协议ssh1
- -2: 强制scp命令使用协议ssh2
- -4: 强制scp命令只使用IPv4寻址
- -6: 强制scp命令只使用IPv6寻址
- -B: 使用批处理模式(传输过程中不询问传输口令或短语)
- -C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
- -p:保留原文件的修改时间,访问时间和访问权限。
- -q: 不显示传输进度条。
- -r: 递归复制整个目录。
- -v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
- -c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
- -F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
- -i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
- -l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
- -o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
- -P port:注意是大写的P, port是指定数据传输用到的端口号
- -S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
从本地复制到远程
命令格式:
scp local_file remote_username@remote_ip:remote_folder
#或者
scp local_file remote_username@remote_ip:remote_file
#或者
scp local_file remote_ip:remote_folder
#或者
scp local_file remote_ip:remote_file
第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;
复制目录命令格式:
scp -r local_folder remote_username@remote_ip:remote_folder
#或者
scp -r local_folder remote_ip:remote_folder
第1个指定了用户名,命令执行后需要再输入密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码;
从远程复制到本地
将上一节 从本地复制到远程 的最后两个参数互换即可。
nomachine远程桌面
使用nomachine远程连接,但是如果远程不连接显示器的话,就无法正常使用,所以需要创建虚拟桌面。
首先安装
$ sudo apt-get install xserver-xorg-core-hwe-18.04
$ sudo apt-get install xserver-xorg-video-dummy
然后加入配置文件,实现开机自启
在 /usr/share/X11/xorg.conf.d/ 中添加 xorg.conf 文件如下:
$ sudo vim /usr/share/X11/xorg.conf.d/xorg.conf
Section "Monitor"
Identifier "Monitor0"
HorizSync 28.0-80.0
VertRefresh 48.0-75.0
# https://arachnoid.com/modelines/
# 1920x1080 @ 60.00 Hz (GTF) hsync: 67.08 kHz; pclk: 172.80 MHz
Modeline "1920x1080_60.00" 172.80 1920 2040 2248 2576 1080 1081 1084 1118 -HSync +Vsync
EndSection
Section "Device"
Identifier "Card0"
Driver "dummy"
VideoRam 256000
EndSection
Section "Screen"
DefaultDepth 24
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
SubSection "Display"
Depth 24
Modes "1920x1080_60.00"
EndSubSection
EndSection
重启即可
注意:
重启之后即使接入了显示器,也不会输出信号到显示器上!
要想接真实显示器显示画面得删除配置文件,删除命令
sudo rm /usr/share/X11/xorg.conf.d/xorg.conf
删除后重启电脑即可。
Unable to make the local display available or access to the local display is disabled
NX> 162 Disabled service: nxnode.问题的解释
Waiting for the desktop user to authorize your connection问题解决办法:
修改/usr/NX/etc/server.cfg文件,把所有Access相关的参数全部根据注释修改成最宽泛的选项,然后重启nomachine server。
重启nomachine
sudo -i /usr/NX/bin/nxserver --restart
查看ip
sudo -i /usr/NX/bin/nxserver --upnpstatus
查看状态
sudo -i /usr/NX/bin/nxserver --status
sudo
赋予用户sudo权限
创建新用户
adduser [name]
在root权限下输入
usermod -aG sudo [name]
- a表示append,添加
- G表示group,将用户添加到sudo组
Ubuntu sudo:/usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位
不小心把自己ubuntu系统的usr目录的权限给改了,执行了chmod 777 -R /usr
命令导致自己的sudo命令执行报错“sudo:/usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位”,然后子root用户密码也忘记。
首先我们想到是把修改的权限改过来,但是现在没法执行sudo,也没法进入root用户,那我们就进入recovery模式(即单人模式)去修改吧
- 进入recovery模式(即单人模式)
重启的时候,进入ubuntu高级选项 “Advanced options for ubuntu”,从上到下选中后面带有(recovery mode),按e进入,找到linux /boot/vmlinuz 开头这句话。然后把 “ro recovery nomodeset …”改为 “rw single init=/bin/bash”,按CTRL+x, - 修改root密码
sudo passwd
#输入两遍密码
#修改成功
- 修改权限
chmod 4755 /usr/bin/sudo
chmod 755 /usr
chmod 644 /usr/lib/sudo/sudoers.so
chown -R root:root /usr/lib/sudo
chmod 0440 /etc/sudoers
- 修改完后按
Ctrl + Alt + Del
重启
apt安装指定版本
apt-get install <<package name>>=<<version>>
查询指定软件有多少个版本
apt-cache madison <<package name>>
apt-cache policy <<package name>>
将列出所有来源的版本。信息会比上面详细一点
代理配置
系统代理
- 临时配置,在终端中输入:
# http代理
export http_proxy="http://proxy_server:port/"
export http_proxy="socks4://proxy_server:port/" #协议不同
# https代理
export https_proxy="http:/proxy_server:port/"
# ftp代理
export ftp_proxy="http://proxy_server:port/"
# 全局代理
export all_proxy="http://proxy_server:port/"
# 指定不走代理的域名或者ip,用逗号分隔
export no_proxy="127.0.0.1,192.168.124.0/16,*.example.com"
- 代理需要用户名密码:
# 协议://用户名:密码@代理服务器ip(域名):端口
export http_proxy="http://username:password@proxy_server:port/"
需要注意的是,如果用户名密码中带有特殊符号,需要十六进制百分号转义(使用%加上符号的十六进制ASII值代表)。
常见需要转义的符号:
~ : %7E, ! : %21
@ : %40, # : %23
$ : %24, % : %25
^ : %5E, & : %26
* : %2A, ? : %3F
- 配置全局代理:在
/etc/profile
或/etc/profile.d/proxy.sh
中加入上述命令 - 取消代理:
# 取消http代理
unset http_proxy
# 取消https代理
unset https_proxy
# 取消ftp代理
unset ftp_proxy
Docker配置代理
# 创建目录
mkdir -p /etc/systemd/system/docker.service.d
cd /etc/systemd/system/docker.service.d
echo -e '[Service]\nEnvironment="HTTP_PROXY=http://proxy.com:8080/"\n\
Environment="HTTPS_PROXY=http://proxy.com:8080/"\n\
Environment="NO_PROXY=localhost,127.0.0.1"' > http-proxy.conf
# 更新配置并重启
systemctl daemon-reload && systemctl restart docker
apt配置代理
在/etc/apt/apt.conf
或/etc/apt/apt.conf.d/proxy.conf
中添加:
# HTTP代理
Acquire::http::proxy "http://username:password@proxy_server:port/";
# HTTPS代理
Acquire::https::proxy "http://username:password@proxy_server:port/";
禁用证书验证,如果出现Certificate verification failed错误,可以修改apt配置临时禁用证书验证:
Acquire::https::Verify-Peer "false";
yum配置代理
# 1、无密码
echo "proxy=http://proxy.com:8080/" >> /etc/yum.conf
# 2、有密码(如果密码带有@符号需要进行转义,转为 %40 即可)
echo "proxy=http://username:password@proxy.com:8080/" >> /etc/yum.conf
# 或最后添加
proxy=http://proxy_ip:port/
proxy_username=代理服务器用户名
proxy_password=代理服务器密码
wget配置代理
echo "http_proxy=http://proxy.com:8080/" >> /etc/wgetrc && \
echo "https_proxy=http://proxy.com:8080/" >> /etc/wgetrc
curl使用代理
curl www.baidu.com --proxy http://proxy.com:8080/
跳过ssl证书检测
curl -k www.baidu.com
配置文件:curl会自动读取~/.curlrc
并配置
配置文件可以由原生命令行选项组成,也可以不加破折号。
git 使用代理
git config --global http_proxy "http://proxy.com:8080/"
clone时指定代理:
git clone xxx -c http_proxy=http://proxy.com:8080/
取消证书检验:
git config --global http.sslverify false
域名无法解析问题
Resolving ... failed: Tempory failure in name resolution
解决办法:
配置DNS(Domian Name System)域名解析服务器
vim /etc/resolv.conf
# 添加语句指定域名服务器
nameserver 8.8.8.8
search baidu.com # search 后是一个搜索列表,他告诉DNS服务器在解析域名时如果在域名的最后没有添加顶级域名,则自动添加baidu.com
但是/etc/resolv.conf
会被系统覆盖,重启系统就会消失,使用resolvconf
来实现重写系统的DNS信息
sudo apt install resolvconf
sudo systemctl status resolvconf.service
sudo systemctl start resolvconf.service
sudo systemctl enable resolvconf.service
更新/etc/resolv.conf
sudo resolvconf --enable-updates
sudo resolvconf -u
为了让改变起作用,需要重启相应的服务
sudo systemctl restart resolvconf.service
sudo systemctl restart systemd-resolved.service
查看当前使用的DNS服务器:
# for ubuntu18.04 and ubuntu20.04
systemd-resolve --status
# for ubuntu22.04
resolvectl status
AppImage应用启动报错:Cannot mount AppImage, please check your FUSE setup
执行命令,解压文件:
./*.AppImage --appimage-extract
在解压目录找到文件AppRun
,双击打开应用即可!
创建桌面应用图标
- 桌面图标位置
Lniux下桌面图标储存路径为:/usr/share/applications
- 桌面图标格式
所有桌面图标格式均为desktop,即名为XXX.desktop - 编辑内容(常用)
// 文件头(必须)
[Desktop Entry]
// 编码方式(可选)
Encoding=UTF-
//程序名(必须)
Name = XXX
//图标(可选)
Icon=图标文件名(全称包含路径)
//执行脚本(若为应用程序桌面图标则必选)
Exec=脚本文件路径
// 分类
Type=Application
// 鼠标经过上面时的提示名称
Comment=comment
示例(以创建android studio文字图标)
- 先创建文件
/usr/share/applications/studio.desktop
- 修改文件
sudo vim /usr/share/applications/studio.desktop
[Desktop Entry]
Name=AndroidStudio
Comment=AndroidStudio
Exec=/usr/local/android-studio/bin/studio.sh
Icon=/usr/local/android-studio/bin/studio.png
Terminal=false
Type=Application
ESC回到命令行模式,:wq保存文件并退出。保存之后之后就OK了.
串口
1.Ubuntu串口驱动安装与使用
1.1安装
$ sudo apt-get install minicom
1.2配置
$ sudo minicom -s
按方向键选择Serial port setup
,按Enter键
配置完串口设备后,按Enter键,再输入E,配置波特率,按默认配置即可 115200 8N1 (波特率:115200,数据位:8,奇偶校验位:N 无,停止位:1)。 配置完波特率,按Enter键,再输入F,配置硬件流控,选择NO。 再继续配置软件流控,也选择NO。都配置完后,按下Enter键返回上一界面,选择save setup as dfl(即将其保存位默认配置),再选择Exit,关闭minicom。
1.3 使用
再次输入命令 sudo minicom,是刚才的配置生效,就可以看到串口输出信息。
1.4 Ubuntu 查看串口,设置串口权限
查看串口
$ ls -l /dev/ttyUSB*
调整访问权限
- 命令行设置
sudo chmod a+rw /dev/ttyUSB0
- udev规则设置
$ sudo touch /etc/udev/rules.d/70-ttyusb.rules
$ sudo gedit /etc/udev/rules.d/70-ttyusb.rules
添加一行:
KERNEL=="ttyUSB[0-9]*", MODE="0666"
1.5 绑定USB端口号
查看USB设备ID
$ lsusb
Bus 005 Device 007: ID 10c4:ea60 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
ID 10c4:ea60表示ATTRS{idVendor}==10c4, ATTRS{idProduct}==ea60
配置udev规则
$ sudo gedit /etc/udev/rules.d/70-ttyusb.rules
添加一行
KERNEL==”ttyUSB*”, ATTRS{idVendor}==”10c4”, ATTRS{idProduct}==”ea60”, MODE:=”0666”, SYMLINK+=”lidar”
KERNEL表示硬件的usb主分类,SYMLINK即固定的串口号
https://www.corvin.cn/474.html
Ubuntu下的串口助手cutecom
查看电脑链接的串口信息(名称)
$ dmesg | grep ttyS*