常用Linux知识

图形显示

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)

ubuntu图形化界面安装

远程连接

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模式(即单人模式)去修改吧

  1. 进入recovery模式(即单人模式)
    重启的时候,进入ubuntu高级选项 “Advanced options for ubuntu”,从上到下选中后面带有(recovery mode),按e进入,找到linux /boot/vmlinuz 开头这句话。然后把 “ro recovery nomodeset …”改为 “rw single init=/bin/bash”,按CTRL+x,
  2. 修改root密码
    sudo passwd
    #输入两遍密码
    #修改成功
    
  3. 修改权限
    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
    
  4. 修改完后按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,双击打开应用即可!

创建桌面应用图标

  1. 桌面图标位置
    Lniux下桌面图标储存路径为:/usr/share/applications
  2. 桌面图标格式
    所有桌面图标格式均为desktop,即名为XXX.desktop
  3. 编辑内容(常用)
    // 文件头(必须)
    [Desktop Entry]
    // 编码方式(可选)
    Encoding=UTF-
    //程序名(必须)
    Name = XXX
    //图标(可选)
    Icon=图标文件名(全称包含路径)
    //执行脚本(若为应用程序桌面图标则必选)
    Exec=脚本文件路径
    // 分类
    Type=Application
    // 鼠标经过上面时的提示名称
    Comment=comment 
    

示例(以创建android studio文字图标)

  1. 先创建文件/usr/share/applications/studio.desktop
  2. 修改文件
    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*
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shilong Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值