操作系统项目实践(深度操作系统——从入门到开发)

简介: 笔记

一、前言


 很早之前就想写这篇Linux实践总结了,但因为期末考试周就一直耽误下来。共花费三周的操作系统实践让我在技术层面上有了很大的提升,因为有些问题只有遇到了才会考虑,只有动手了才能想到之前没想到的层面——这一点不仅适用于操作系统,计算机类的其他课程也是同理。为了把握住接下来的两个月暑假留校做项目的机会,我会会保证一周不低于5篇的技术文章产出,不仅仅是为了记录我的项目产出,也希望能帮到大家。

 本篇博文使用的深度(deepin)操作系统。如果说只是为了满足日常使用,用linux系统平替Windows系统,那么“用Linux替代windows,而不是在一堆Linux发行版中脱颖而出”才是我们应当考虑的,而非其他什么需要花费大量时间去自行搭建脚手架。这一点,deepin做到了,现在发行的Deepin 20.9版本已经能很好地满足普通用户的日常需要!

10.png


二、deepin操作系统实践大纲


1、硬件设备保障

1、解决Deepin20.6 TP-Link WN726n免驱-找不到Wifi选项的问题

2、解决系统安装之后没有声音的情况

3、解决集成声卡的音箱静音后电流噪音问题

4、关于使用虚拟机解决驱动问题的可能性探讨


2、系统使用及美化

1、以root权限运行命令配置且无需输入密码(sudo和pkexec)

2、设置共享文件,实现windows访问deepin共享文件

3、在deepinOS上加入方正字体,更换系统默认中文字体

4、使用命令美化标题栏大额头,设置任意高度和任意颜色,自定义最大化最小化关闭按钮


3、软件应用安装落地

1、Deepin 20 安装microsoft office

2、截屏+OCR+搜索+贴图+以图搜图

3、解决OBS录屏软件不能运行问题

4、火狐浏览器国际版简单设置

5、网易云音乐调整缩放比例

6、安装跨平台的B站”桌面端”bilimini

7、安装调试为知笔记deepin版


4、进一步开发

1、解决启停docker容器导致VMware虚拟机断网问题

2、deepin 中配置DTK开发环境

3、解包/打包deb

4、qt程序打包为deb包

5、deepin可用的http并发测试工具


三、深度操作系统deepin


 深度(deepin)操作系统为统信集团旗下的一款操作系统(国产操作系统)。内核为Debian,所以Debian内核的其他Linux发行版和深度操作系统在很多方面上都有相似之处。这类上一张主流Linux发行版的思维导图方便理解:

11.png

 一个典型的Linux桌面发行版包括一个Linux 内核,来自GNU的工具和库,和附加的软件、文档,还有一个窗口系统,窗口管理器,和一个桌面环境

 内核:内核是操作系统中应用连接硬件设备的桥梁

 而对于一个现代的操作系统来说,我觉得它的内核至少应该提供以下 4 种基本能力:

 1)管理进程、线程(决定哪个进程、线程使用 CPU);

 2)管理内存(决定内存用来做什么);

 3)连接硬件设备(为进程、和设备间提供通信能力);

 4)提供系统调用(接收进程发送来的系统调用)。

 为了解决Linux下精品应用少的问题,深度采用三种方法解决:

 1)自造轮子(深度软件中心,深度截图,深度终端等等)

 2)deepin-wine项目(包括主流应用:QQ,微信,钉钉等等,造福整个Linux行业)

 3)和国内软件厂商共同开发Linux应用:搜狗输入法(13年),有道词典(15年),网易云音乐(16年)


四、基于vmware的安装及双系统安装


 常规安装过程没什么好说的,在官网上下载好的ISO映像文件后配置虚拟机就行了。如果选择全盘安装->选择初始化备份,安装时间会久一些,但是系统崩溃后可以通过初始化备份恢复。

 安装 deepin 20.4 之后的版本,安装器能自动识别已有 EFI 分区,无需再另外手动创建。

12.png

   EFI系统分区(ESP):其实是一个FAT32格式的小分区,通常大小约为100MB,是用于存储EFI引导加载程序和系统启动期间固件调用应用程序的地方。

 另外也可在windows10下实现deepin双系统安装:

 1)准备一个4GB或以上的无数据空白优盘(系统安装镜像大小为2039.23MB);

 2)到Deepin深度系统官方网站https://www.deepin.org/zh/,打开下载页面,下载深度启动盘制作工具;

 3)下载系统ISO镜像,不要下载Live系统(Live系统是精简系统,功能不全,暂时用不着)。


13.png

 做完以上步骤后,还需了解自己电脑的硬盘数、是否为新式UEFI模式,制作Deepin深度系统启动盘,进行硬盘分区。再关闭Fast Boot,在Boot页面下方启动项选择 USB启动,用做好的系统盘安装系统。最后进行盘符设置(这里一般按照10G/20G/50G的大小分区)就大功告成了!

 如果硬盘驱动器采用GUID分区表(GPT)分区形式,则在安装操作系统后,会自动生成EFI系统分区(无论是在Windows还是Mac操作系统受支持)。

 BlOS(Basic Input Output System)称为“基本输出输入系统”,是用于为操作系统和程序提供运行时服务以及在启动过程(开机启动)期间执行硬件初始化的固件。UEFI 是传统 PC BIOS 的继承者,旨在解决其技术限制。注意这里要选择手动安装而非全盘安装,否则硬盘将会被格式化,硬盘内原来的学习资料会全部丢失!


五、硬件设备保障


1、网卡问题

 安装完毕之后发现有蓝牙但没有WiFi这个选项,只能连接有线网络,并且deepin设置界面没有“无线网络”功能和符号,断定是缺少无线网卡驱动。解决方法如下:

 1)在终端输入:lspci,查看网卡信息

 2)下载和自己电脑相匹配的驱动jar包

 3)减压下载好的rjar包(我这里的是82545EM-master)

 4)在解压好的驱动包目录下右键空白区域在终端中打开

 5)在终端命令行输入代码:


sudo ./dkms-install.sh  //等待运行结束安装完成
sudo modprobe 82545EM //启动模块无限服务
sudo apt-get update  //更新资源列表

14.png

 安装成功后,结果如下:

15.png

 其实在安装网卡驱动时还出现了【Linux kernel source not configured - missing autoconf.h】(缺失执行内核编译命令后产生的头文件)的错误,需要重新编译一个内核。要解释起来很麻烦就不展开了(逃)


2、声卡问题及更普适的驱动问题

 这里突发奇想:既然虚拟机可以用蓝牙,那么虚拟机按理来说也是可以用无线网卡的。这里可以用共享网络来解决!如果我用虚拟机驱动网卡,再网络共享到宿主机,这不就完美解决了吗?本地开一个VPM-1就行!

 VPM:虚拟广域网(互联网),但经济层面不太现实…

 解决完了网卡问题,又发现系统安装之后没有声音,可先尝试打开控制中心-声音-高级设置,切换输出源(按理来说可解决80%的问题)。

 但还是无法解决,我们可以使用命令sudo apt-get install pavucontrol下载 pavucontrol 。然后打开软件,选择配置,找到输出设备,打开下拉框,选择一个没有unplugged的设备。然后点击输出设备选项卡,该选项卡里面有上下两个输出源,通过切换到自己的输出设备就可以解决声音问题了。

16.png

 不能更新/降级内核的场景有很多,比如专业版/LTS的系统不会轻易更新内核,显卡驱动卡着一更新就黑屏/一些旧外设驱动不支持新内核,而其他设备不能被旧版本内核驱动,又或者是非X86架构的机器

 为了普适地解决问题,可以用轻量级的虚拟机——比如QEMU,跑一个使用高版本内核/低版本内核的极简Linux发行版,专门用来驱动宿主机无法驱动的外设(就比如无线网卡/摄像头),然后转发给主机。一些旧版本内核才能驱动的外设,也可以用类似的方式共享给主机。这样可以在不更改主机内核,而且不怎么影响性能(极简发行版,即使是用不同架构也不会特别占资源)的前提下较完美地解决驱动问题。


六、系统使用及美化


1、更换系统默认中文字体

 为了更平滑地使用deepin,我们还需要对其优化,就先从更换系统默认中文字体开始,以小米 MiSans 中文字体为例:

 以 root 或者 sudo ,在 /etc/fonts/conf.d/ 目录下,新建一个 3x.conf 文件(x可为1-4中的任意一个),文件内容如下图所示,然后保存文件。

17.png

 从字库下载字体后,确认系统是否已经安装了这款字体文件。在终端输入:fc-list | grep -i “misans”


18.png


 如果已安装字体,输出内容类似如下所示:


/usr/share/fonts/truetype/xiaomi/MiSans-Regular.ttf: MiSans:style=Regular
/usr/share/fonts/truetype/xiaomi/MiSans-Bold.ttf: MiSans:style=Bold


 然后运行命令来确认系统默认的 sans-serif 字体,是否已经设定为 小米 MiSans:


fc-match sans-serif

 如输出:

MiSans-Regular.ttf: “MiSans”“Regular”

则大功告成

 其实如果想把系统默认字体,改成其它字体,如华为字体,更纱黑体。只需要以 root 用户,把上面新建的 3x.conf 字体配置文件中的 2处“MiSans”(弥散), 改成相应字体名即可。


2、美化标题栏额头

 deepin里GTK应用标题栏设计的高度很高,而且和菜单栏一样是白色,组合到一起更高了,看起来很难看,比例不协调。为美化标题栏额头,我们可以执行以下命令:

curl --proto '=https' --tlsv1.2 -sSf 
https://gitee.com/2016_12_21/up_kernel/raw/master/titlebar.sh | bash


 执行完成后需注销账户再重新登录,即可看到效果。

 如果想自定义设置高度和颜色,文件位于:


~/.local/share/deepin/themes/deepin/light/titlebat.ini
[Active] 是活动窗口的设置
[Inactive] 是非活动窗口的设置
height是标题栏高度,可以自行调整
backgroundColor是标题栏颜色,可以设置任意自己喜欢的颜色

19.png

3、实现windows访问deepin共享文件

 在完成之前的deepin操作时,Windows内的文件需要用U盘或网盘传给deepin系统,很不方便。为此,我们可以创建共享文件夹以实现windows访问deepin共享文件夹。

 当然不限于本地设备的不同操作系统的文件传输,两台操作系统不同的设备也可借助相应的应用软件在同一局域网下实现数据的互通,也可不安装任何软件实现局域网快速共享文件。

 在大多数Linux发行版中,Python都会作为系统组件预装在内,deepin也不例外。Python有一个非常好用的简单服务器功能,只需要一条命令即可创建一个简易的单线程服务器:


python3 -m http.server
//在想要分享的目录打开终端,创建此目录为根目录创建HTTP服务器


记住端口号,然后在同一局域网下的其他设备上就可以在浏览器访问通过输入”http://IP:端口号”来访问这个文件夹。

 这时,我们就可以通过python在局域网下的任何设备之间传输文件,而不需要传输端和接受端下载任何软件!

20.png

 我们现在的步骤是:必须右键打开终端,然后输入命令,之后回车,然后在接受端输入地址,然后才能访问传输。其实这一过程还可以进一步简化。


七、软件应用安装落地


1、Office 2013

 解决完硬件及美化问题,可以考虑在Deepin中用deepin-wine6-stable安装Microsoft Office等应用软件了,这里以Office2013为例:

 Microsoft Office2013安装镜像iso文件放在下载文件夹(~/Downloads)中:


 在终端输入命令:

WINEPREFIX=~/.deepinwine/Deepin-Office 
deepin-wine6-
stable~/Downloads/cn_office_professional_plus_2013_x86_x64_dvd_1149708/setup.exe

21.png

 而想制作桌面图标制作桌面图标也很简单。以Access的图标为例(三件套的图标制作方法一样,就不一一介绍了)

 在桌面新建一个txt文件,命名为MSACCESS.txt,复制右边内容到txt文件里,保存退出txt,右键重命名,把这个txt文件的后缀改为desktop。大功告成!

 为了一劳永逸解决wine应用字体显示乱码、方块、显示不出等问题,这里推荐“Win字体”:

22.png

 (1)字段1:WINEPREFIX=是指定的容器路径

 (2)字段2:deepin-wine6-stable是你使用的wine

 (3)字段3:最后接英文双引号,双引号内是要运行的exe程序在容器drive_c(即模拟的c盘)中的路径,这里用的是Word


2、OBS录屏软件

 Deepin自带了录频快捷键(ctrl+alt+r),可以自行选择录频区域,但不自带转码。于是想到OBS录屏。

23.png

 可惜,在deepin 20.9 OBS录屏一点就崩(至少我这里是这样的),我们可以这么解决:

sudo apt install flatpack     // 先安装flatpack,再添加源
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install flathub org.gtk.Gtk3theme.deepin
flatpak install flathub org.gtk.Gtk3theme.deepin-dark   
// 安装深度主题相关
点击https://flathub.org/apps/details/com.obsproject.Studio链接的上面INSTALL按钮,下载安装文件
打开命令行,flatpak install --from 下载的安装文件路径 安装应用


 等安装完毕后,启动器里就有新版本的OBS了。这时再打开OBS录屏,正常运行,不再闪退了。


3、其他常用应用软件应用展示

24.png


 顺手解决了Linux(Deepin)上无Flash插件的问题,可以运行拳皇1.9.1:

26.png25.png27.png


 经过之前的美化和安装应用后,最终桌面效果:


28.png


八、进一步开发


1、解决启停docker容器导致VMware虚拟机断网

 在后续使用时,我发现docker启停任何一个container时就会让虚拟机(nat网络的)断网一下,猜测是更新iptables规则导致的

 kvm虚拟机时的解决方法是让docker和kvm使用同一个网桥nat 。但是我安装的是Vmware,试过把VMware的vmnet8改成桥接至docker0网桥,缺点是至少启动一个container实例才能使用这个网桥上网,不然网络状态是没插网线

 Docker 容器:是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了docker引擎的服务器上(包括流行的Linux机器、windows机器),也可以实现虚拟化。

 现在解决方法是:软路由+桥接+仅主机:

30.png

 软路由wan口设置好上网方式,两个wan口分别对应笔记本有线和无线网卡,有一个正常链接网络就能让软路由正常上网。

 软路由的lan网络想弄几个弄几个,对应创建vm仅主机网络对接就好。实测本来就只影响vmnat网络的数据转发,对仅主机和桥接网络无影响。

 vm网桥连接宿主机时就会自动配置上对应网段的第一个ip。这个IP也不要让软路由使用,避免冲突。

 软路由不需要64位的,不需要在软路由里面再开虚拟机了。


2、配置 DTK 开发环境

 国内CPU架构因其多样性的特点,带来了较多的适配工作。同时开发者代码实现风格不统一、底层代码质量不高,造成自研操作系统上的应用开发门槛较高,应用生态缺失。统信 UOS 为此开发套件开发者快速实现跨平台跨架构的开发套件——DTK。

 在官网下载uniontechos-desktop-20-professional-1030-fix_amd64 镜像,常规安装系统后,顺利进入到桌面。

 进入 控制中心-通用-开发者模式-进入开发者模式 ,激活开发者模式成功后,重启系统;

 更新源(若使用内网源,下载某些软件失败,记得换源)后,继续配置DTK 开发环境:


sudo apt update  //更新源
sudo apt install qt5-default qtcreator cmake g++ git       
//C++ 开发环境配置完成
sudo apt install libdtkwidget-dev libdtkgui-dev libdtkcore-dev 
//DTK 开发环境配置完成

在这之后,我们来验证 C++ 开发环境 配置是否成功:

 打开 QtCreator ,创建一个空的 Qt 空项目,执行运行,发现 C++ 开发环境 配置成功,大功告成!

 选定软件开发目录->克隆基本框架->修改其中的“DtkDemo.pro”为项目名字->Configure Project->运行按钮(快捷键“F5”)稍等两秒,即可看到基于dtk的窗口!

31.png


3、deb 软件包解包

 deb 格式是 Debian 系统(包含 Debian 和 Ubuntu )专属安装包格式,配合 APT 软件管理系统,是在Linux 下非常流行的一种安装包。

 Deb是Debian Linux操作系统中的软件包格式,Deb文件通常包含预编译的二进制文件、脚本和元数据。Deb文件可以通过包管理器(如dpkg)进行安装、升级和卸载。

 Deb文件的结构非常简单。它是一个压缩文件,可以使用标准的压缩工具(如gzip或bzip2)进行解压缩,当然也可以不借助工具解压缩:

 1、准备file-roller(归档管理器)。

 2、获取软件包 apt download spark-store。


32.png

 3、右键用归档管理器打开,把内容拖出来,解压到想要的位置。然后把压缩包解压。

 之后把control文件夹改名为DEBIAN,把data文件夹内的内容拖出来并删除到data文件夹。

33.png

 拆包完成!可以直接反向打包了。这里的打包就是解包的逆过程,可以在网上下载打包模板套用就行。一般在opt里放软件,str里放快捷方式。


4、部署 http 并发测试工具

 有大佬上传了自制的http并发测试工具,软件地址:https://github.com/leihenshang/http-little-toy

 部署过程:

 直接使用go install github.com/leihenshang/http-little-toy,再把go/bin放到环境变量里,使用http-little-toy 带上待测网站参数即部署完成。

 运行过程:

 1)手动编译成二进制文件直接运行


# 把项目编译成可执行文件并输出到当前目录
go build -o httpToy


 2)还可以放到全局变量中从而直接从命令行中执行


# 使用纯命令
 ./httpToy -d 10 -t 80 -u http://127.0.0.1:9090
或者使用如下命令:
# 使用请求文件
./httpToy -d 10 -t 80 -f request_sample.json
# 使用test-server
 go run . -u http://localhost:9090 -H aaa:bbbb -H ccc:ddd -body "hhhhh2333333" -d 2 -t 


九、后记


 通过之前的安装、系统使用和软件包安装,不难发现深度(deepin)操作系统的最大特点是美观。但因为大量的视觉效果优化,加重了系统资源的消耗。我试着在win7虚拟机上安装deepin双系统,画面切换有明显的卡顿,预计其对CPU主频的要求为2G以上。

 另外deepin一度拥有所有linux发行版中最大的官方软件仓库,现在被ubuntu以略微的优势反超。由于deepin的仓库更倾向于收藏国内的软件,这一点在国内仍然算优势。

 中文社区活跃,社区资源丰富也是其主要优点。

 但我们也看到刚刚演示的deepin中加入了一些硬件设备保障的操作,而且这部分操作极其消磨精力,诸如双系统时间不同步(需修改注册表)、I/O报错(使用命令badblocks -s -v /dev/sda扫描自定义路径的坏块),各种各样的不兼容、不适配、缺失头文件、缺少依赖关系(喜闻乐见)等问题也反映了其驱动支持不完善、维护不连续的特点。

 而且系统美化和进一步开发的难度也比较大,自定义的便利性低,感觉不如Arch Linux开放世界 ,而这方面Manjaro倒是个不错的选择。

34.png

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
相关文章
|
4天前
|
人工智能 Android开发 数据安全/隐私保护
移动应用与系统:探索开发趋势与操作系统的协同进化####
当今时代,移动应用不再仅仅是简单的软件工具,它们已成为扩展智能手机及平板等设备功能的关键。本文旨在深入分析当前移动应用的开发趋势,探讨移动操作系统的最新进展及其对应用开发的影响,并阐述两者如何相互促进、协同进化,共同推动移动互联网技术向前发展。 ####
|
9天前
|
人工智能 物联网 Android开发
移动应用与系统:探索开发趋势与操作系统的协同进化####
本文深入探讨了移动应用开发的当前趋势,以及这些趋势如何与移动操作系统的发展相互影响、协同进化。通过分析最新的技术动态、市场数据及用户行为变化,本文旨在为开发者提供关于未来移动应用开发方向的洞察,并讨论操作系统层面的创新如何促进或制约应用的发展。 ####
|
9天前
|
存储 运维 安全
探索操作系统:从理论到实践
【10月更文挑战第34天】操作系统,这个我们每天都在使用,却很少深入了解的神秘世界,究竟隐藏着怎样的秘密?本文将带你走进操作系统的世界,从理论到实践,一探究竟。我们将一起探讨操作系统的基本概念、功能、以及它在计算机系统中的重要角色。同时,我们还将通过代码示例,深入理解操作系统的工作原理和实现方式。无论你是计算机专业的学生,还是对操作系统感兴趣的普通用户,这篇文章都将为你打开一扇通往操作系统世界的大门。
|
12天前
|
安全 物联网 Android开发
移动应用与系统:探索开发趋势与操作系统的演进####
【10月更文挑战第29天】 本文深入探讨了移动应用开发的最新趋势与挑战,并分析了主流移动操作系统(如Android、iOS)的发展动态。通过对比不同系统的技术特点和市场表现,揭示了移动应用生态系统的复杂性及其对开发者的影响。此外,还讨论了跨平台开发工具的兴起如何改变应用开发流程,以及这些变化对未来移动计算领域的潜在影响。 ####
28 4
|
20天前
|
前端开发 测试技术 调度
移动应用与系统:探索开发与操作系统的奥秘####
【10月更文挑战第22天】 本文深入剖析了移动应用的开发流程与移动操作系统的核心原理,揭示了两者如何相互依存、共同推动移动互联网的发展。从应用架构设计到操作系统性能优化,全方位解读移动生态的技术细节,为开发者和用户提供有价值的参考。 ####
29 5
|
18天前
|
搜索推荐 前端开发 测试技术
移动应用与系统:探索开发之道与操作系统的演进#### 一、
【10月更文挑战第24天】 本文将带你深入探索移动应用开发的全过程,从构思到上架的每一个细节。同时,我们还将回顾移动操作系统的发展历程,分析当前主流系统的技术特点和未来趋势。无论你是开发者还是普通用户,都能在这里找到感兴趣的内容。 #### 二、
23 1
|
21天前
|
安全 算法 Unix
深入浅出操作系统:从基础概念到实践应用
【10月更文挑战第22天】本文旨在以浅显易懂的语言,为读者揭开操作系统的神秘面纱。我们将从操作系统的基本概念出发,逐步深入其核心功能与设计哲学,并通过具体代码示例,展示操作系统如何在实际中发挥作用。无论你是计算机科学的学生,还是对技术有浓厚兴趣的爱好者,这篇文章都将为你提供一次轻松愉快的操作系统之旅。
35 4
|
21天前
|
存储 算法 Shell
深入浅出操作系统:从基础到实践
【10月更文挑战第22天】本文将带领读者深入理解操作系统的基本原理与实际应用。通过浅显易懂的语言和逐步递进的内容安排,文章不仅介绍了操作系统的核心概念,还通过实际代码示例展示了操作系统原理的应用。适合初学者和有一定基础但希望加深理解的读者。
|
22天前
|
供应链 程序员 C语言
深入理解操作系统:从理论到实践
【10月更文挑战第21天】本文将带你深入理解操作系统的基本原理和实践应用。我们将从操作系统的基本概念开始,探讨其功能和结构,然后通过一个简单的代码示例,展示操作系统如何在实际中发挥作用。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供新的视角和深度理解。
34 2
|
23天前
|
安全 Android开发 数据安全/隐私保护
移动应用与系统:探索开发趋势与操作系统革新#### 一、
【10月更文挑战第20天】 本文旨在剖析当前移动应用开发的热门趋势,并探讨移动操作系统的最新进展与未来展望。通过梳理从原生应用到跨平台开发的转变,以及主流操作系统如iOS和Android的技术创新,本文为开发者提供了一份详尽的行业指南,助力他们在快速迭代的移动科技领域保持领先。 #### 二、
35 2

热门文章

最新文章