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

Linux通过Docker安装Microsoft Office+RDP远程控制

之前根据B站教程《在linux上安装微软office》:在linux上安装微软office_哔哩哔哩_bilibili

写过一篇使用KVM虚拟机安装Microsoft Office+RDP远程控制的文章,根据B站的教程安装后,发现有远程控制延迟的问题,比如拖动Office窗口时会延迟,搜狗输入法扫一下就闪退,插入形状后无法调整大小,无法调整图片大小等问题。而且最大的问题是,如果你不提前关闭KVM虚拟机,就得等待Linux关机时杀掉KVM虚拟机的'libvirt' 进程,导致关机需要很长时间。已知Linux开机时会同步开启KVM虚拟机的'libvirt' 进程,这个'libvirt' 进程经常导致Linux系统崩溃,开机时黑屏。停留在只有一条白色下杠的页面。

因此,Winapps最新版本提供了解决方案,推荐用户使用Docker或者Podman安装Microsoft Office + RDP远程控制。降低了系统崩溃的概率。接下来我将带大家如何进行安装和设置。

系统:Ubuntu24.04

前提:已经安装了Docker

(不会安装Docker的,请查看《Ubuntu24.04安装Docker》的文章)

一、从github下载winapps

在必应搜索“winapps github”

复制HTTPS的下载链接:https://github.com/Fmstrat/winapps.git

进入/opt目录,通过git clone把winapps下载到/opt目录下

yammie@my-pc >/opt 
$ git clone https://github.com/Fmstrat/winapps.git

为了后续执行不受权限的干扰,给winapps中的所有文件授予777权限。

yammie@my-pc >/opt 
$ sudo chmod 777 -r ./winapps

 
此时winapps的所有者和权限如图:

进入winapps/docs,阅读docker.md的安装步骤。里面提示可以通过docker或者podman进行安装,此处我们选择docker。

二、阅读并修改compose.yaml

1. compose.yaml的内容

打开compose.yaml,阅读里面的设置要点。修改为以下内容,复制粘贴即可

name: "winapps"
volumes:   # Linux系统中通过建立'_data'目录来作为Docker镜像的数据卷# 此处默认注释,执行compose.yaml时,它也会默认安装到下面的目录# Located @ '/var/lib/docker/volumes/winapps_data/_data' (Docker).# Located @ '/var/lib/containers/storage/volumes/winapps_data/_data' or '~/.local/share/containers/storage/volumes/winapps_data/_data' (Podman).data:
services: # 服务器windows:  # Windows的镜像容器image: dockurr/windows  # 指定从github中下载dockur/windows的Docker镜像container_name: WinApps  # 创建Docker容器名称为WinAppsenvironment:                # 要配置的Windows镜像版本环境。要选择Windows版本,请访问:VERSION: "core11"  # https://github.com/dockur/windows ; 下拉即可看到各种Windows版本。RAM_SIZE: "4G"      # 内存: 4GCPU_CORES: "4"    # CPU核心数:4DISK_SIZE: "64G"   # 主硬盘存储空间: 64G#DISK2_SIZE: "32G"  # 第二块硬盘存储空间:32G。如果你要取消该注释,需要保证提供了该硬盘给虚拟机运行LANGUAGE: "Chinese"  # 此处必须要指定安装语言为Chinese,不然默认安装EnglishREGION: "zh-CN"         # 此处必须要指定地区为:zh-CN,不然默认安装EnglishKEYBOARD: "zh-CN"   # 此处必须要指定键盘为zh-CN,不然默认安装EnglishUSERNAME: "Docker"  # Windows虚拟机的用户名默认是Docker,你可以取消注释,重命名为其他名字。建议默认PASSWORD: "123456me"  # Windows虚拟机登录密码,自定义即可。不能为空。HOME: "${HOME}"  # 设置Linux用户主文件夹的路径privileged: true  # 授予Windows 虚拟机扩展权限ports:- 8006:8006  # 将Linux主机上的“8006”映射到Windows 虚拟机上的“8006”→用于VNC Web界面http://127.0.0.1:8006.- 3389:3389/tcp  # 将Linux主机上的“3389”映射到Windows 虚拟机上的“3389”→用于远程桌面协议(RDP)- 3389:3389/udp # 将Linux主机上的“3389”映射到Windows 虚拟机上的“3389”→用于远程桌面协议(RDP)stop_grace_period: 120s     # 停止宽限期 ;当你去关闭Windows虚拟机时,等待120秒后才会发送SIGTERM信号去终止Windows的镜像容器进程。SIGTERM 信号提供了一种优雅的方式来终止程序。restart: on-failure     # 如果退出代码指示错误,将重新启动Windows VMvolumes:       # Windows虚拟机的数据卷- data:/storage  # 挂载上面Linux系统中的'_data'数据卷,作为Windows虚拟机的C盘- ${HOME}:/shared  # 挂载Linux用户的home目录,作为Windows虚拟机的远程网络共享目录,名称为: \\host.lan\Data'.#- /path/to/second/hard/disk:/storage2 # 确保上面指定了第二块硬盘,取消注释,就会为Windows虚拟机加载第二块硬盘- ./oem:/oem    # 自动触发“oem/install.bat”的安装,应用含有'oem/RDPApps.reg'的Windows注册表修改。- /opt/winapps/iso/tiny11_core11.iso:/custom.iso #取消注释,使用自己下载的Windows.iso文件。一旦使用自己的iso文件,上面environment设定的  VERSION: "core11"  将会被忽略。devices:  # 设备- /dev/kvm # 启动 KVM.#- /dev/sdX:/disk1 # 取消注释,直接在Windows VM中挂载磁盘(注意:“disk1”将作为主驱动器挂载)#- /dev/sdY:/disk2 # 取消注释,直接在Windows VM中装载磁盘(注意:“disk2”及更高版本将作为辅助驱动器装载

有关文档、常见问题解答、其他配置选项和技术帮助,请访问:GitHub的dockurr/windows的Docker镜像容器icon-default.png?t=N7T8https://github.com/dockur/windows

(1) 注意:请不要使用Tab来调整注释位置,yaml文件不能识别Tab,不然执行会报错:
yaml: line 19: found character that cannot start any token
 

(2) 原来的compose.yaml中, - ./oem:/oem  - /opt/winapps/iso/tiny11_core11.iso:/custom.iso 默认是注释掉的。意味着我们默认从environment设定的  VERSION: "core11"  来下载Tiny 11 Core版本的Win11,网速不够快的情况下,用时超长。

因此,我们建议取消对- ./oem:/oem  - /opt/winapps/iso/tiny11_core11.iso:/custom.iso的注释。直接从指定的网站下载我们需要的iso文件。iso文件放在/opt/winapps/iso/目录下。iso目录需要我们自行创建。

指定本地的iso文件后,直接忽略了environment设定的  VERSION: "core11"  的下载 ,加快了加载win11的速度。

(3) image: dockurr/windows是 ‘‘rr’’结尾,但是github里面该项目是dockur/windows,少了1个r,可能是创作者过往遗留的路径名称问题,compose.yaml使用的是"rr"结尾的dockurr/windows!不要写错了。

2、疑难解答

(1) 什么是数据卷(Volumes)

Docker镜像被存储在一系列的只读层中。当我们创建一个容器时,Docker会读取镜像(只读),并在其顶部添加一层读写层。如果正在运行中的容器修改了现有文件,该文件将会被拷贝出底层的只读层,放到最顶层的读写层中。读写层中原来的旧版本文件(未被更改过的文件)仍然存在于镜像中。

所以当Docker容器被删除后,再基于原来的镜像创建容器时,将创建一个没有任何数据更改的容器,在之前那个容器中的数据更改会丢失掉。只读层和读写层的组合被Docker称为联合文件系统(Union File System)。

为了能够持久化这些更改过的数据,并且能够很容易实现容器间共享数据,Docker提出了Volume的概念。Volume是外部默认的联合文件系统或者是存在于宿主文件系统中正常的文件或文件夹。


(2) 为什么需要数据卷

这得从Docker容器的文件系统说起。出于效率等一系列原因,Docker容器的文件系统在宿主机上存在的方式很复杂,这会带来下面几个问题:

不能在宿主机上很方便地访问容器中的文件。
无法在多个容器之间共享数据。
当容器删除时,容器中产生的数据将会丢失。
为了解决这些问题,Docker引入了数据卷(Volume) 机制。数据卷以独立于Docker文件系统的形式存在于宿主机中。数据卷的最大特点是:其生存周期独立于容器的生存周期。

数据卷的设计目的就是数据的持久化,因为其生存周期独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。所以数据卷可以带来以下好处:

数据卷可在容器之间共享或重用数据。
数据卷的更改可以直接生效。
数据卷的生命周期一直持续到没有容器使用它为止。
对数据卷操作不会影响到镜像本身。
数据卷可以完成容器到宿主机、宿主机到容器以及容器到容器之间的数据共享。

(3) 什么是 SIGTERM(信号 15)

SIGTERM(信号 15)在基于 Unix 的操作系统(如 Linux)中用于终止进程。SIGTERM 信号提供了一种优雅的方式来终止程序,使其有机会准备关闭并执行清理任务,或者在某些情况下拒绝关闭。Unix/Linux 进程可以以多种方式处理 SIGTERM,包括阻塞和忽略。

SIGTERM 是 Unix/Linux kill 命令的默认行为,当用户执行 kill 时,操作系统会在后台向进程发送 SIGTERM。如果过程不在 Docker 容器中,通过 SIGTERM 信号终止的容器在其日志中显示退出码 143。如果您是 Kubernetes 用户,本文将帮助您了解 Kubernetes 终止容器时幕后发生的情况,以及如何在 Kubernetes 中使用 SIGTERM 信号。

(4) KVM是什么

 KVM,是Keyboard Video Mouse的缩写,KVM 通过直接连接键盘、视频或鼠标 (KVM) 端口,能够访问和控制计算机。KVM 技术无需目标服务器修改软件。这就意味着可以在BIOS环境下,随时访问目标计算机。KVM 提供真正的主板级别访问,并支持多平台服务器和串行设备。

三、下载指定的Windows系统的iso

因为上面compose.yaml默认从下面的网站下载iso文件,所以我们就从这里进去,选定要安装的Windows版本。

dockurr/windows指定的Windows系统下载区icon-default.png?t=N7T8https://file.cnxiaobai.com/Windows/%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/


此处我选择tiny11 core x64 beta 1.iso下载。下载位置为:/opt/winapps/iso/
一定要跟compose.yaml指定的iso文件路径对应上!!

四、通过docker compose启动compose.yaml,安装Windows系统到dockurr/windows的镜像容器

yammie@my-pc >/opt 
$ cd ./winappsyammie@my-pc >/opt/winapps 
$ docker compose --file ./compose.yaml up

接着终端提示进入http://127.0.0.1:8006的端口,在浏览器中进行Windows系统的安装。

安装过程略。

五、把修改后的compose.yaml复制到~/.config/winapps

安装完毕后,修改 /opt/winapps/compose.yaml,把以下内容注释掉:

     # - ./oem:/oem   #- /opt/winapps/iso/tiny11_core11.iso:/custom.iso

接着把修改后的compose.yaml复制到~/.config/winapps

yammie@my-pc >/opt 
$ sudo mkdir ~/.config/winappsyammie@my-pc >/opt 
$ sudo cp ./compose.yaml ~/.config/winapps

六、停掉并删除 /opt/compose.yaml启动的容器,然后通过~/.config/winapps/compose.yaml启动新的容器

yammie@my-pc >/opt 
$ docker compose --file ./compose.yaml downyammie@my-pc >/opt 
$ docker compose --file ~/.config/winapps/compose.yaml up


打开http://localhost:8006/,看到Windows系统能够运行即可。记住用户名为:Docker,以及你自定义的密码:123456me。等会用来写WinApps的配置文件。
 

七、进入Windows系统后,进行各种安装和设置

1、设置系统名称为RDPWindows

开始→设置→主页:点击重命名→命名为RDPWindows

2、在微软商店下载浏览器

我下载的是火狐浏览器

3、在浏览器中下载搜狗输入法并安装

4、下载Microsoft Office安装器

office-toolsicon-default.png?t=N7T8https://otp.landian.vip/zh-cn/

安装步骤:

注意!注意!以前安装过office要先卸载旧的才能安装 ,若是没有安装过的 跳过这一步 直接看下面。
安装过的 点击 工具箱---office工具---移除office后即可
 
① 打开tool plus 按照以下步骤依次执行
 
② 点击 设置---部署---启用显示内部产品和通道
 
③ 点击 部署---更新通道---选择最后一个 beta channel 同时安装模块选择office tool plus
 
④ 点击 添加产品---搜索框中输入 2024 ---选择office LTSC 专业增强版 2024 批量许可 即可( 其他2024 还有专业版同理)同时语言设置中文
 
⑤ 点击部署即可
 

5、激活系统和Microsoft Office


6、重点:注销Docker用户,等会进行WinApps的安装时必须要先注销,不然报错。
 

八、安装WinApps的依赖,并书写配置文件

1、安装WinApps的依赖

yammie@my-pc >/opt 
$ sudo apt-get install dialog   yammie@my-pc >/opt 
$ sudo apt-get install freerdp3-x11 

2、书写配置文件

(1) 创建设置文件夹

yammie@my-pc >/opt 
$ sudo mkdir ~/.config/winapps

(2) 编辑设置文件

yammie@my-pc >/opt 
$ sudo touch ~/.config/winapps/winapps.conf   

(3) 授予777权限,方便日后我们修改里面的用户名和密码

yammie@my-pc >/opt 
$ sudo chmod 777 ~/.config/winapps/winapps.conf

(4) 写入我们在Win11设置好的用户名和密码

yammie@my-pc >/opt 
$ sudo gedit ~/.config/winapps/winapps.conf 

九、在用户层级安装WinApps

1、修改/opt/installer.sh

定位到/opt/installer.sh的第76、77行,MyWindowsUser修改为Docker,MyWindowsPassword修改为123456me

2、进入/opt目录,执行./installer.sh,安装WinApps

如果是sudo ./installer.sh安装,安装界面会识别成root用户。
如果是./installer.sh安装,安装界面会识别成当前用户。

我们在执行./installer.sh时,建议不要使用sudo ./installer.sh,在root层级安装WinApps,会涉及权限问题。最好是直接执行./installer.sh,在用户层级安装WinApps。方便日后无需权限去修改WinApps相关的内容。

执行以下命令:

yammie@my-pc >/opt 
$ ./installer  

按图选择:

安装成功!!此时双击Word可以成功开启。

请注意,Windows虚拟机请保持Docker用户在注销状态,Linux用户才能通过WinApps远程遥控Windows虚拟机的Microsoft Office。


十、如果~/.config/winapps/compose.yaml发生了修改,需要执行以下命令

如果~/.config/winapps/compose.yaml发生了修改,Windows镜像容器需要被移除和重新创建,这并不会影响磁盘里面的数据。注意,通过查看~/.config文件夹的属性,这是用户层级下创建的文件夹,无需sudo去操作。


1、停止并删除存在的Windows镜像容器

yammie@my-pc >/opt/winapps
$ docker compose --file ~/.config/winapps/compose.yaml down

2、删除存在的FreeRDP证书,移除证书后,WinApps不再起作用

yammie@my-pc >/opt/winapps
$ rm ~/.config/freerdp/server/127.0.0.1_3389.pem 

3、删除WinApps的远程控制以及图标,但是不删除/home/yammie/.config/winapps,因为里面的配置文件我们等会还要用

yammie@my-pc >/opt/winapps 
$ ./installer.sh --user --uninstall

4、重建并启动Windows的镜像容器,此时WinApps并无对该系统进行远程控制

yammie@my-pc >/home/yammie 
$ docker compose --file ~/.config/winapps/compose.yaml up  

5、进入http://localhost:8006,确保你已经注销Docker用户,接着 缩小或者关闭浏览器都行

6、重新执行WinApps的安装程序,才能生成新的pem证书和远程软件图标快捷方式

yammie@my-pc >/opt/winapps 
$ ./installer.sh 

按《八、在用户层级安装WinApps》的教程即可

十一、当Windows镜像容器卡死,如何解决

注意:有时候RDP Windows 相关的进程会卡死,通过
docker compose --file ~/.config/winapps/compose.yaml kill
也无法kill掉docker容器的情况下。

需要通过搜索:ps -aux|grep RDP
找到RDP的PID,第二个16677就是了

yammie@my-pc >/home/yammie 
$ ps -aux|grep RDP
                                         
yammie  16677  0.0  0.0   9304  2304 pts/0    S+   02:27   0:00 grep --color=auto RDP
 

 然后kill -9 <PID>即可。一定要添加-9选项,不然不能强制kill掉RDP进程

yammie@my-pc >/home/yammie 
$ kill -9 16677

然后通过容器重启:

yammie@my-pc >/home/yammie 
$ docker compose --file ~/.config/winapps/compose.yaml start

十二、docker的其它命令

docker compose --file ~/.config/winapps/compose.yaml start # 启动Windows镜像容器
docker compose --file ~/.config/winapps/compose.yaml pause # 暂停Windows镜像容器
docker compose --file ~/.config/winapps/compose.yaml unpause # 唤醒Windows镜像容器
docker compose --file ~/.config/winapps/compose.yaml restart # 重启Windows镜像容器
docker compose --file ~/.config/winapps/compose.yaml stop #优雅关闭Windows镜像容器,用时很长
docker compose --file ~/.config/winapps/compose.yaml kill #暴力关闭Windows镜像容器,用时很短
docker compose --file ~/.config/winapps/compose.yaml down #停止并删除Windows镜像容器

十三、创建启动和暴力关闭Windows镜像容器的桌面快捷方式

1、创建图标

(1) 进入 /opt/winapps/icons,复制windows.svg 2次,创建两个副本,分别命名为:close_Winapps.svg 和 open_Winapps.svg


(2) 分别编辑close_Winapps.svg 和 open_Winapps.svg的颜色代码,设置如下:

  ① close_Winapps.svg

      <stop offset="0" stop-color="orange"/><stop offset=".4" stop-color="orange"/><stop offset="1" stop-color="orange"/>

  ② open_Winapps.svg

      <stop offset="0" stop-color="#CCFF66"/><stop offset=".4" stop-color="#CCFF66"/><stop offset="1" stop-color="#CCFF66"/>

(3) 在~/桌面创建两个desktop文件

yammie@my-pc >/home/yammie/桌面 
$ touch close_Winapps.desktopyammie@my-pc >/home/yammie/桌面 
$ touch open_Winapps.desktop

close_Winapps.desktop

​[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=关闭WinApps
#图标路径
Icon=/opt/winapps/icons/close_Winapps.svg
Terminal=true
Exec=bash /opt/winapps/Winapps_close_open/close_Winapps.sh

open_Winapps.desktop

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=打开WinApps
#图标路径
Icon=/opt/winapps/icons/open_Winapps.svg
Terminal=true
Exec=/opt/winapps/Winapps_close_open/open_Winapps.sh

此处设置Terminal=true,弹出终端框,是为了让用户看到该程序执行状态。

2、创建脚本

(1) 在/opt/winapps下创建Winapps_close_open目录

yammie@my-pc >/opt/winapps 
$ mkdir Winapps_close_open

(2) 创建脚本

yammie@my-pc >/opt/winapps/Winapps_close_open 
$ touch close_Winapps.shyammie@my-pc >/opt/winapps/Winapps_close_open 
$ touch open_Winapps.sh

close_Winapps.desktop

#!/bin/bash
docker compose --file ~/.config/winapps/compose.yaml kill # 暴力关闭WinApps

open_Winapps.desktop

#!/bin/bash
docker compose --file ~/.config/winapps/compose.yaml start # 开启WinApps

3、右键图标→允许运行

双击黄色图标,关闭WinApps。
双击绿色图标,开启WinApps。

建议关闭Linux前,先关闭WinApps。不然杀后台进程需要挺长时间,导致关机时间也会延长。

相关文章:

Linux通过Docker安装Microsoft Office+RDP远程控制

之前根据B站教程《在linux上安装微软office》&#xff1a;在linux上安装微软office_哔哩哔哩_bilibili 写过一篇使用KVM虚拟机安装Microsoft OfficeRDP远程控制的文章&#xff0c;根据B站的教程安装后&#xff0c;发现有远程控制延迟的问题&#xff0c;比如拖动Office窗口时会…...

利用Qt实现调用文字大模型的API,文心一言、通义千问、豆包、GPT、Gemini、Claude。

利用Qt实现调用文字大模型的API&#xff0c;文心一言、通义千问、豆包、GPT、Gemini、Claude。 下载地址: AI.xyz 1 Qt实现语言大模型API调用 视频——Qt实现语言大模型API调用 嘿&#xff0c;大家好&#xff01;分享一个最近做的小项目 “AI.xyz” 基于Qt实现调用各家大模型…...

借助医疗保健专用的 LLM提高诊断支持与准确性

概述 最近的研究表明&#xff0c;大规模语言模型在医疗人工智能应用中非常有效。它们在诊断和临床支持系统中的有效性尤为明显&#xff0c;在这些系统中&#xff0c;它们已被证明能为各种医疗询问提供高度准确的答案&#xff08;例如&#xff0c;医生在诊断过程中需要用到语言…...

微前端(qiankun)

微前端 特点&#xff1a;独立开发、独立部署&#xff0c;独立运行&#xff0c;增量升级 解决的问题&#xff1a;日常开发过程中&#xff0c;可能有很多老项目需要迭代&#xff0c;但是可能新的一些可能需要使用的依赖或者新的一些框架&#xff0c;老项目已经不满足&#xff0c;…...

速通c++(周二)

前言 Hello&#xff0c;大家好啊&#xff0c;我是文宇&#xff0c;不是文字&#xff0c;是文宇哦。 今天是速通c第二期。 运算符 c里的运算符种类有很多&#xff0c;因为这个教程是入门教程&#xff0c;所以只介绍其中我们会用到的几种。 算数运算 c中的算数运算有九个&a…...

拓扑未来物联网平台简介

拓扑未来物联网平台是基于Thingsboard二次开发的面向产业互联和智慧生活应用的物联网PaaS平台&#xff0c;支持适配各种网络环境和协议类型&#xff0c;可实现各种传感器和智能硬件的快速接入。有效降低物联网应用开发和部署成本&#xff0c;满足物联网领域设备连接、智能化改造…...

软件测试经理工作日常随记【7】-接口+UI自动化(多端集成测试)

软件测试经理工作日常随记【7】-UI自动化&#xff08;多端集成测试&#xff09; 自动化测试前篇在此 前言 今天开这篇的契机是&#xff0c;最近刚好是运维开发频繁更新证书的&#xff0c;每次更新都在0点&#xff0c;每次一更新都要走一次冒烟流程。为了不让我的美容觉被阉割…...

软考:软件设计师 — 9.数据流图

九. 数据流图 数据流图是下午场考试中第一个题目&#xff0c;分值 15 分。通常会考察实体名、存储名、加工名的补充&#xff0c;以及找到缺失的数据流并改正等。 1. 数据平衡原则 数据流的分析依赖于数据平衡原则。 父图与子图之间的平衡 父图与子图之间平衡是指任何一张 …...

收银系统源码-门店折扣活动应该怎么做

系统概况&#xff1a; 专门为零售行业的连锁店量身打造的收银系统&#xff0c;适用于常规超市、生鲜超市、水果店、便利店、零食专卖店、服装店、母婴用品、农贸市场等类型的门店使用。同时线上线下数据打通&#xff0c;线下收银的数据与小程序私域商城中的数据完全同步&#…...

Python数值计算(12)——线性插值

1. 概述 插值是根据已知的数据序列&#xff08;可以理解为你坐标中一系列离散的点&#xff09;&#xff0c;找到其中的规律&#xff0c;然后根据找到的这个规律&#xff0c;来对其中尚未有数据记录的点进行数值估计的方法。最简单直观的一种插值方式是线性插值&#xff0c;它是…...

TypeScript(switch判断)

1.switch 语法用法 switch是对某个表达式的值做出判断。然后决定程序执行哪一段代码 case语句中指定的每个值必须具有与表达式兼容的类型 语法switch(表达式){ case 值1&#xff1a; ​ 执行语句块1 break; case 值2&#xff1a; ​ 执行语句块3 break; dfault: //如…...

血细胞自动检测与分类系统:深度学习与UI界面的结合

一、项目概述 项目背景 在医学实验室中&#xff0c;血细胞的检测和分类是诊断和研究的重要环节。传统方法依赖于人工显微镜检查&#xff0c;费时且容易出现误差。通过深度学习技术&#xff0c;特别是目标检测模型YOLO&#xff0c;可以实现自动化、快速且准确的血细胞检测和分…...

鸿蒙Flex布局

效果&#xff1a; 代码&#xff1a; 换行代码参数设置&#xff1a; wrap:FlexWrap.Wrap Entry Component struct FlexCase {State message: string Hello World;build() {Flex({direction:FlexDirection.Row,justifyContent:FlexAlign.SpaceAround,alignItems:ItemAlign.Cen…...

开发自己的 Web 框架

开发自己的 Web 框架 开发Web服务器主体程序开发Web框架程序使用模板来展示响应内容开发框架的路由列表功能采用装饰器的方式添加路由电影列表页面的开发案例 接收web服务器的动态资源请求&#xff0c;给web服务器提供处理动态资源请求的服务。根据请求资源路径的后缀名进行判断…...

用于自动驾驶的基于立体视觉的语义 3D 对象和自我运动跟踪

Stereo Vision-based Semantic 3D Object and Ego-motion Tracking for Autonomous Driving 论文 摘要&#xff1a; 我们提出了一种基于立体视觉的方法&#xff0c;用于在动态自动驾驶场景中跟踪相机自我运动和 3D 语义对象。我们建议使用易于标记的 2D 检测和离散视点分类以及…...

Spring@Autowired注解

Autowired顾名思义&#xff0c;就是自动装配&#xff0c;其作用是为了消除代码Java代码里面的getter/setter与bean属性中的property。当然&#xff0c;getter看个人需求&#xff0c;如果私有属性需要对外提供的话&#xff0c;应当予以保留。 因此&#xff0c;引入Autowired注解…...

32.x86游戏实战-使用物品call

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…...

Prometheus+Alertmanager+邮件告警

参考node_exporter-CSDN博客&#xff0c;球球不要断更&#xff01;&#xff01;&#xff01;&#xff01; 大致流程 1.部署promethus 可以写一个自定义的 systemd 服务启动文档&#xff0c;详情见自定义的 systemd 服务启动方式-CSDN博客 [rootlocalhost system]# sudo tee /e…...

upload-labs漏洞靶场~文件上传漏洞

寻找测试网站的文件上传的模块&#xff0c;常见&#xff1a;头像上传&#xff0c;修改上传&#xff0c;文件编辑器中文件上传&#xff0c;图片上传、媒体上传等&#xff0c;通过抓包上传恶意的文件进行测试&#xff0c;上传后缀名 asp php aspx 等的动态语言脚本&#xff0c;查…...

PostgreSQL 高阶函数详解:全面深入的功能与实用示例

PostgreSQL 高阶函数详解 PostgreSQL 是一款功能强大的开源关系数据库管理系统&#xff0c;以其丰富的功能和高扩展性著称。在数据处理和分析方面&#xff0c;PostgreSQL 提供了一系列高阶函数&#xff0c;可以极大地简化和优化各种复杂操作。本文将详细介绍 PostgreSQL 的高阶…...

Redis——集合 SET

目录 1. 添加元素 SADD 2. 查看元素 SMEMBERS 3. 判断元素是否存在该集合 SISMEMBER 4. 删除元素 SREM 集合 SET 是一种无序集合&#xff1b;因此其与列表有以下区别&#xff1a; &#xff08;1&#xff09;列表是有序的&#xff0c;集合是无序的&#xff1b; &#xff0…...

openEuler安装docker

1.下载地址 搜索docker 寻找docker-ce 复制地址 2.配置仓库 [rootlocalhost yum.repos.d]# pwd /etc/yum.repos.d [rootlocalhost yum.repos.d]# vim docker-ce.repo [docker-ce] namedocker baseurlhttps://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/ gpgche…...

每天一个数据分析题(四百六十五)- 缺失值

某连续型变量的数据集存在缺失值&#xff0c;可以采用哪种方法处理&#xff1f; A. 插值法填补 B. EM算法填补 C. 随机森林填补 D. 以上均不对 数据分析认证考试介绍&#xff1a;点击进入 题目来源于CDA模拟题库 点击此处获取答案 数据分析专项练习题库 内容涵盖Pytho…...

干货 | 变频器的详细介绍

变频器简述 变频器是电机控制领域中常见的一种设备&#xff0c;也称变频调节器&#xff0c;是一种将固定频率的交流电转换为可调频率的交流电的电力电子设备&#xff0c;用于控制交流电机的转速和输出功率。变频器通过调节输出电源的电压和频率&#xff0c;从而控制电动机的转速…...

Linux线程2

线程相关函数 线程分离--pthread_detach&#xff08;后面会详细讲&#xff09; 函数原型&#xff1a;int pthread_datach(pthread_t thread); 调用该函数之后不需要 pthread_join 子线程会自动回收自己的PCB 杀死&#xff08;取消&#xff09;线程--pthread_cancel 取…...

乱弹篇(40)人类追求长寿

不要认为只有中国的老龄化才严重&#xff0c;实际上全球都面临老龄化&#xff0c;其中日本最为严重。 这是随着人类生活和医学水平的不断提高&#xff0c;寿命才会比过去数十年有了大幅度的提升。据资料显示&#xff0c;目前全球平均预期寿命估计为73岁。与百年之前相比&#…...

技术详解:互联网医院系统源码与医保购药APP的整合开发策略

本篇文章&#xff0c;小编将从系统架构、数据安全、用户体验和技术实现等方面详细探讨互联网医院系统与医保购药APP的整合开发策略。 一、系统架构 1.模块化设计 互联网医院系统与医保购药APP的整合需要采用模块化设计。 2.微服务架构 每个功能模块作为一个独立的微服务&am…...

N4 - Pytorch实现中文文本分类

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目录 任务描述步骤环境设置数据准备模型设计模型训练模型效果展示 总结与心得体会 任务描述 在上周的任务中&#xff0c;我们使用torchtext下载了托管的英文的…...

centos 如何安装sox音视频处理工具

要在 CentOS 系统上安装 Sox 音频处理软件&#xff0c;你可以遵循以下步骤。请注意&#xff0c;这些说明适用于 CentOS 7&#xff0c;对于 CentOS 8 及更高版本&#xff0c;某些包管理命令可能略有不同。 第一步&#xff1a;安装所需的依赖库 首先&#xff0c;你需要安装一系列…...

Java语言程序设计——篇十一(2)

&#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; 欢迎大家&#xff1a;这里是我的学习笔记、总结知识的地方&#xff0c;喜欢的话请三连&#xff0c;有问题可以私信&#x1f333;&#x1f333;&…...

微网站定制/产品软文模板

RPM安装 1、卸载mariadb rpm -e mariadb-libs 5.5.56-2.el7.x86_642、在官网下载Mysql-5.6.32-1.l7.x86_64.rpm-bndle.tar 3、解压 tar xvf Mysql-5.6.32-1.l7.x86_64.rpm-bndle.tar4、 yum install Mysql-client-5.6.32-1.l7.x86_64.rpmyum install Mysql…...

南通优普网站建设团队/百度图片识别搜索

相关操作学习记录备忘录 echo offrem 1、添加winrar压缩软件到系统环境变量&#xff0c;才可以压缩文件 rem 2、设置变量 不能有空格 "set a 123"(报错) "set a123"(正确) rem 3、强制删除文件夹 /s /q rem 4、重命名文件 第二个参数必须是文件…...

做网站接活全流程/网站推广多少钱

VLAN&#xff08;Virtual Local Area Network&#xff09;虚拟局域网一种将局域网内的设备通过逻辑地划分成为一个个网段来进行管理的技术VLAN是建立在物理网络基础上的一种逻辑子网&#xff0c;因此建立VLAN需要相应的支持VLAN技术的网络设备当网络中的不同VLAN间进行相互通信…...

苏州企业网站制作电话/东营网站建设哪家更好

2-3树真的是非常完美的平衡二叉树了&#xff0c;平衡二叉树(BST)的要点在于它的每条从根节点到叶子节点的路径都具有相同的长度&#xff0c;并且在数据结构中&#xff0c;对于查找和插入操作&#xff0c;最糟糕的情况下时间复杂度为O(log n)。与我在第四十五天讲的BST有什么不一…...

做旅游网站的毕业论文/网站外链出售

本节分别介绍Tmonitor web portal和后台进程的安装部署&#xff0c;web portal和后台最好能分别安装在不同的机器上。注意&#xff1a;所有操作均在root权限下执行。 安装需要3个包&#xff08;以安装时最新的发布包为准&#xff09;: web_portal_2.2.18_05130ad9.tar.gz 主要…...

wordpress 密码失败/深圳关键词推广

CSS3属性box-shadow使用详细教程 box-shadow&#xff1a;length length length length color length&#xff1a;阴影水平偏移值 length&#xff1a;阴影垂直偏移值 length&#xff1a;阴影模糊值 length&#xff1a;阴影边框 color&#xff1a;阴影颜色 说明&#xff1a;设置…...