新闻详情

新闻详情

首页 / 资讯中心 / 详情

Linux 用户登录动态监测:utmp 读取与等待指定用户登录实战

发布时间:2026/9/30 10:22:17来源:尧图网络
Linux 用户登录动态监测:utmp 读取与等待指定用户登录实战
操作系统实验里有一类题目看起来很朴素却特别能暴露你对系统接口的掌握程度比如这个用户登录动态监测程序跑起来先把当前系统中的已登录用户名单列出来再检查某个指定用户是否已经登录如果没登录不退出而是等着直到这个人真正出现在登录列表里。这个需求在操作系统原理和实践课程里很常见但真动手写会碰到 utmp 结构、登录记录更新、权限、轮询间隔、终端类型、远程会话判断等一连串细节。它适合刚学 Linux 系统编程的同学也适合需要做登录审计、值守脚本、实验验收的运维和开发者参考。别小看“列出已登录用户”和“等待指定用户登录”这两个动作前者要求你理解操作系统怎么记录会话后者要求你设计一个可靠又不折腾 CPU 的监测循环。下面我就按这个实验从思路、机制到代码、排错完整走一遍尽量把课本上没展开的坑也讲清楚。1. 实验目标拆解与登录监测的整体思路1.1 需求不是“查一次”而是“持续等”这个实验的第一层需求是静态查询程序启动后先列出当前系统中的已登录用户名单。这个动作很像你平时敲who或w但实验要求你自己写逻辑而不是完全依赖现成命令。第二层需求才是关键检查指定用户是否已登录。如果已经登录就显示该用户的会话信息比如终端、登录时间、来源主机如果未登录程序不能立刻退出而要进入等待状态周期性重新检查直到目标用户登录成功。很多同学第一次做会写成死循环里不停读文件结果 CPU 占用上去实验验收时被老师一眼看出来。更稳妥的做法是“扫描一次、睡一会儿、再扫描”用时间换 CPU同时设置合理的轮询间隔和可选超时。1.2 数据源选择为什么盯住 utmpLinux 系统记录用户登录信息的传统文件是/var/run/utmp现在很多发行版实际路径是/run/utmp但宏_PATH_UTMP会指向正确位置。这个文件不是普通文本而是由一组struct utmp记录组成的二进制数据库。登录程序在用户认证成功后会往这里写入一条USER_PROCESS记录用户退出时记录类型会变成DEAD_PROCESS或对应条目被更新。who、users、w这些命令底层大多也在读它。相比解析who的文本输出直接读 utmp 更接近操作系统原理字段更完整也不容易受到输出格式、语言环境、列宽变化的影响。当然直接读 utmp 需要处理结构体字段、字节序、权限和不同发行版的差异这正好是实验想训练的能力。1.3 技术路线C语言实现为主Shell作对照我建议主线用 C 语言实现用setutent()、getutent()、endutent()遍历 utmp用ut_type USER_PROCESS筛选真实登录会话用strncmp比对ut_user。等待逻辑单独封装成函数内部用sleep()控制频率。这样既符合操作系统实验对系统调用的要求也方便扩展成多用户监测、写日志、超时退出。Shell 脚本可以作为对照方案用who | awk快速验证思路但验收时如果要求“程序”而不是“命令组合”还是 C 代码更稳。两条路线我都建议你跑一遍因为 Shell 能帮你快速确认系统里到底有没有登录记录C 代码则帮你理解底层数据结构。1.4 环境准备与最小验证动手前先做三个检查。第一确认系统有/run/utmp或/var/run/utmp可以执行ls -l /run/utmp /var/run/utmp一般会看到一个 root 和 utmp 组可读写的文件。第二执行who看当前是否有活动会话如果who有输出而你的程序读不到优先查权限和头文件。第三确认编译环境gcc --version、make --version至少有一个可用。实验环境如果是 Ubuntu 20.04、CentOS 7、RHEL 7、麒麟、统信等常见系统传统 utmp 机制基本可用如果是在 Docker 容器里做可能没有挂载宿主机的 utmp现象就是名单永远为空这时候要先解决环境而不是怀疑代码。准备一个测试账号也很重要比如user1方便你实际登录、退出、再登录观察程序输出变化。2. utmp/utmpx 机制与用户登录数据来源2.1 utmp、wtmp、btmp 的分工Linux 里和登录相关的记录文件不止一个。utmp记录当前正在登录的用户是“现在谁在线”的快照wtmp记录历史登录、注销、关机、重启等事件last命令读的就是它btmp记录失败登录尝试lastb命令读它。实验要求“动态监测当前已登录用户”所以核心是utmp不是wtmp。有些教材会写成/var/adm/utmp、/var/run/utmp不同版本路径有差异代码里应优先使用_PATH_UTMP宏而不是把路径写死。utmpx是 utmp 的扩展接口提供setutxent()、getutxent()等函数字段更丰富但很多 Linux 实验环境用传统utmp.h就够了。你如果发现编译时报getutent未定义先检查是否包含utmp.h再检查是否需要在编译时定义_GNU_SOURCE。2.2 struct utmp 里真正要用的字段struct utmp字段不少但这个实验只需要盯住几个。ut_type表示记录类型USER_PROCESS才是用户已登录ut_user是用户名ut_line是终端名比如tty1、pts/0ut_host是远程登录来源主机本地登录通常为空ut_tv是登录时间类型是struct timeval里面tv_sec是秒级时间戳ut_pid是相关进程 ID。还有一个容易忽略的点这些字符数组不一定以\0结尾尤其是从二进制文件读出来的旧记录。比较用户名时不要直接用strcmp更稳的是strncmp(u-ut_user, username, UT_NAMESIZE) 0或者先复制到临时缓冲区并手动补零。打印ut_host时也要判断首字符是否为空否则可能输出一串空白。把这些字段搞明白后面代码基本就是填空。2.3 登录过程怎样写入记录用户从getty、login、sshd、显示管理器等入口登录时认证成功后会调用相关函数更新 utmp。传统流程里login程序会填写ut_type、ut_pid、ut_line、ut_user、ut_host、ut_tv然后写入/var/run/utmp。远程 SSH 登录通常由sshd更新记录所以你会看到终端是pts/0之类来源主机是客户端地址。图形界面登录则由显示管理器处理有些系统会写 utmp有些系统更多依赖systemd-logind。这也是为什么实验里偶尔会遇到“明明登录了但 utmp 里没有”的情况。理解写入方你排查时就知道该看sshd配置、PAM 模块还是 logind。实验代码只负责读不负责写所以不要试图手动修改 utmp容易破坏系统记录。2.4 过滤 USER_PROCESS 与处理多会话遍历 utmp 时不能把所有记录都当成“已登录用户”。记录类型包括EMPTY、RUN_LVL、BOOT_TIME、LOGIN_PROCESS、USER_PROCESS、DEAD_PROCESS等。LOGIN_PROCESS通常表示某个终端正在等待登录用户还没认证成功USER_PROCESS才是真正已登录。如果不过滤名单里可能出现空用户名、login、reboot之类奇怪条目。另一个细节是同一用户可能开多个会话比如本地一个、SSH 一个、图形终端一个。实验要求“检查指定用户是否已登录”只要存在至少一条USER_PROCESS记录就算已登录但如果要显示“相应信息”最好把所有匹配会话都打印出来并标上终端、来源、登录时间。这样验收时信息更完整也更能体现你对多会话场景的考虑。3. 核心功能实现列出已登录用户并检测指定用户3.1 读取当前登录名单的完整实现下面这版代码可以直接作为实验主体。它先定义打印函数再定义检测函数最后实现等待循环。注意我用了UT_NAMESIZE做安全比较并对时间做了本地格式化。代码里没有花哨技巧重点是逻辑清楚方便你对照实验报告。实际编译时如果提示implicit declaration of function getutent可以在文件最上方加#define _GNU_SOURCE或者检查编译参数。#define _GNU_SOURCE #include stdio.h #include stdlib.h #include string.h #include utmp.h #include time.h #include unistd.h #include errno.h static void format_time(time_t t, char *buf, size_t len) { struct tm *tm_info localtime(t); if (tm_info NULL) { snprintf(buf, len, 未知时间); return; } strftime(buf, len, %Y-%m-%d %H:%M:%S, tm_info); } void list_logged_users(void) { struct utmp *u; int count 0; printf(%-16s %-12s %-20s %s\n, 用户名, 终端, 登录时间, 来源); printf(------------------------------------------------------------\n); setutent(); while ((u getutent()) ! NULL) { if (u-ut_type ! USER_PROCESS) { continue; } if (u-ut_user[0] \0) { continue; } char timebuf[64]; format_time(u-ut_tv.tv_sec, timebuf, sizeof(timebuf)); printf(%-16s %-12s %-20s %s\n, u-ut_user, u-ut_line, timebuf, u-ut_host[0] ? u-ut_host : 本地); count; } endutent(); if (count 0) { printf(当前没有检测到已登录用户。\n); } }这段代码的关键是setutent()和endutent()成对出现。getutent()每次返回一条记录下一次调用会覆盖上一次的静态缓冲区所以如果你需要保留某条记录必须马上复制或用完即弃。打印时我判断了ut_user[0]和ut_host[0]避免输出空用户名和空来源。终端字段用ut_line远程登录通常显示pts/0、pts/1本地虚拟控制台显示tty1等。实际跑起来如果名单为空先看who有没有输出再检查权限和路径。3.2 检测指定用户是否已登录检测函数比列出名单更简单只要遍历 utmp找到USER_PROCESS且用户名匹配即可。这里也要注意立即返回不要等到遍历完再判断否则虽然结果一样但多会话场景下你会丢掉“有几个会话”的信息。下面这个版本同时支持后续打印会话详情。int is_user_logged_in(const char *username) { struct utmp *u; int found 0; setutent(); while ((u getutent()) ! NULL) { if (u-ut_type ! USER_PROCESS) { continue; } if (strncmp(u-ut_user, username, UT_NAMESIZE) 0) { found 1; break; } } endutent(); return found; } void show_user_sessions(const char *username) { struct utmp *u; int count 0; setutent(); while ((u getutent()) ! NULL) { if (u-ut_type ! USER_PROCESS) { continue; } if (strncmp(u-ut_user, username, UT_NAMESIZE) ! 0) { continue; } char timebuf[64]; format_time(u-ut_tv.tv_sec, timebuf, sizeof(timebuf)); printf( 会话%d: 终端%s 来源%s 登录时间%s\n, count, u-ut_line, u-ut_host[0] ? u-ut_host : 本地, timebuf); } endutent(); if (count 0) { printf( 未找到该用户的活动会话。\n); } }strncmp的第三个参数用UT_NAMESIZE是为了避免ut_user没有终止符时越界读取。实际用户名一般不会正好占满整个数组但实验代码最好养成安全习惯。如果你在 AD 域环境里测试用户名可能带域名后缀比如DOMAIN\\user或userdomain这时候你输入的检测名必须和 utmp 里的记录一致否则会误判为未登录。3.3 等待指定用户登录的轮询循环等待逻辑是整个实验的“动态”部分。核心思路是检查一次如果已登录就返回成功如果未登录打印提示睡若干秒再检查。为了避免永久挂起可以加一个可选超时参数。轮询间隔建议 2 秒左右太短浪费 CPU太长验收时反应迟钝。下面这个函数还处理了超时和间隔参数。int wait_for_user(const char *username, int interval, int timeout) { time_t start time(NULL); while (1) { if (is_user_logged_in(username)) { printf(\n[] 用户 %s 已登录。\n, username); show_user_sessions(username); return 0; } if (timeout 0) { time_t now time(NULL); if (difftime(now, start) timeout) { printf(\n[-] 等待超时用户 %s 仍未登录。\n, username); return 1; } } printf([*] 用户 %s 尚未登录%d 秒后重新检查...\n, username, interval); fflush(stdout); sleep(interval); } }主函数先列出名单再检查目标用户。如果已经登录直接显示详情如果未登录进入等待。这样结构清晰输出也符合实验要求。int main(int argc, char *argv[]) { if (argc 2) { fprintf(stderr, 用法: %s 用户名 [轮询间隔秒] [超时秒]\n, argv[0]); return 1; } const char *target argv[1]; int interval (argc 3) ? atoi(argv[2]) : 2; int timeout (argc 4) ? atoi(argv[3]) : 0; if (interval 0) { interval 2; } printf(当前已登录用户名单\n); list_logged_users(); if (is_user_logged_in(target)) { printf(\n[] 指定用户 %s 已经登录。\n, target); show_user_sessions(target); return 0; } printf(\n[*] 指定用户 %s 当前未登录开始等待。\n, target); return wait_for_user(target, interval, timeout); }3.4 编译、运行与输出解读把代码保存为login_monitor.c编译命令用gcc -Wall -Wextra -O2 -o login_monitor login_monitor.c。-Wall -Wextra能把很多隐藏问题揪出来比如未使用变量、格式字符串不匹配。运行示例./login_monitor zhangsan 2 120表示监测zhangsan每 2 秒查一次最多等 120 秒。如果你当前是普通用户且读不到 utmp可能需要在实验环境里用sudo ./login_monitor zhangsan 2 120或者把当前用户加入utmp组后重新登录。某些系统上/run/utmp权限是rw-rw-r-- root utmp普通用户不在 utmp 组就会打开失败。不要为了图省事把 utmp 改成全局可写那会破坏系统登录记录安全。实测输出通常会先打印表头然后列出所有USER_PROCESS记录。如果目标用户此时未登录会看到“尚未登录2 秒后重新检查”的提示。你另开一个终端用目标账号登录后等待循环下一轮就会检测到并打印该用户的终端、来源和登录时间。如果目标用户已经在线程序会直接显示详情并退出。这个流程完全对应实验要求先列名单再查指定用户未登录则等待直到登录成功。3.5 Shell脚本对照版为了快速验证你还可以写一个 Shell 版本。它不是用来替代 C 实验的而是用来排查“系统里到底有没有记录”。who命令底层也读 utmp输出第一列就是用户名。下面这个脚本能完成同样的动态监测。#!/bin/bash list_logged_users() { echo 当前已登录用户名单 who } is_logged_in() { local target$1 who | awk -v u$target $1 u { found 1 } END { exit found ? 0 : 1 } } wait_for_user() { local target$1 local interval${2:-2} local timeout${3:-0} local start start$(date %s) while true; do if is_logged_in $target; then echo [] 用户 $target 已登录。 who | awk -v u$target $1 u return 0 fi if [ $timeout -gt 0 ]; then local now now$(date %s) if [ $((now - start)) -ge $timeout ]; then echo [-] 等待超时用户 $target 仍未登录。 return 1 fi fi echo [*] 用户 $target 尚未登录$interval 秒后重新检查... sleep $interval done } if [ $# -lt 1 ]; then echo 用法: $0 用户名 [轮询间隔秒] [超时秒] exit 1 fi list_logged_users wait_for_user $1 ${2:-2} ${3:-0}Shell 版的优点是直观缺点是解析文本不如读结构体精确。比如who输出格式会随系统变化某些远程会话第一列可能不是纯用户名AD 域账户也可能带反斜杠。用它做初步验证很合适正式实验报告还是建议以 C 版本为主。4. 常见问题与排查技巧实录4.1 utmp为空或读取失败最常见的现象是程序运行后显示“当前没有检测到已登录用户”但你明明已经登录。先别改代码按顺序排查。第一步执行who如果who也没输出说明系统当前确实没有传统 utmp 会话或者你处在容器、精简系统、Wayland 桌面等环境。第二步检查文件ls -l /run/utmp /var/run/utmp看是否存在、权限是否可读。第三步用loginctl list-sessions看 systemd 是否记录了会话。如果who有输出而程序读不到优先怀疑权限尝试在实验环境用sudo运行。还要注意有些系统把 utmp 放在/var/run/utmp而/run是/var/run的符号链接代码用_PATH_UTMP最稳。若在容器里宿主机和容器 utmp 是隔离的除非特别挂载否则容器内看不到宿主机登录用户。4.2 用户明明登录却检测不到这种情况通常有四个原因。第一记录类型不是USER_PROCESS比如某些登录阶段只是LOGIN_PROCESS那代表等待认证不算已登录。第二用户名比较不一致比如你输入zhangsanutmp 里是zhangsanexample.com或DOMAIN\zhangsanstrncmp就不会匹配。第三目标用户通过图形界面登录系统没有写传统 utmp而是由 logind 管理。第四目标用户登录在另一台机器或另一个容器里你监测的机器根本收不到记录。排查时先打印所有USER_PROCESS记录观察真实用户名和终端名。如果用户名带后缀可以在检测函数里增加模糊匹配规则但实验环境下建议保持精确匹配避免误判。你也可以用loginctl list-users和who -a做交叉验证。4.3 等待循环的CPU、超时与信号等待循环最容易踩的坑是忙等。有人写成while (!is_user_logged_in(user)) { }中间没有sleep结果一个核跑满。正确做法是每次检查后sleep(interval)间隔 2 秒通常够用。如果你希望反应更快可以设成 1 秒但没必要用 0.1 秒因为人登录本身需要时间。另一个问题是无限等待验收时如果目标用户一直不登录程序会卡在那里。加一个可选超时参数更友好超时后返回非零并打印原因即可。还可以注册SIGINT信号处理让用户按CtrlC时优雅退出不过实验基础版不加也能接受。注意sleep可能被信号中断如果需要精确计时可以用循环重新计算剩余时间但一般实验不需要这么复杂。4.4 容器、远程桌面、AD域账户等场景实验环境如果跑在容器里传统 utmp 经常不可用。容器有自己的进程和文件系统宿主机的登录会话不会自动出现在容器内。这时候要么在宿主机做实验要么把 utmp 文件只读挂载进去但挂载后还要考虑记录实时性和权限。远程桌面连接 Windows Server 后再连 Linux 实验机情况取决于你连的是 SSH 还是图形协议SSH 通常写pts记录图形远程桌面可能由显示管理器处理未必写传统 utmp。AD 域用户登录 Linux 时用户名可能带域信息utmp 中的ut_user可能是短名也可能是全名最好先用who观察。麒麟、统信、RHEL、CentOS 等系统在传统 utmp 上差异不大但新版本可能逐步转向systemd-logind所以代码检测不到时交叉验证比死磕代码更有效。4.5 常见问题速查表现象可能原因快速排查处理建议名单为空无活动会话、容器隔离、权限不足who、loginctl list-sessions、ls -l /run/utmp换宿主机实验或用sudo检查 utmp 路径已登录检测不到类型不是USER_PROCESS、用户名带域后缀打印全部记录观察ut_type和ut_user过滤USER_PROCESS核对真实用户名读取失败普通用户无 utmp 读权限看程序是否报错检查文件权限加入 utmp 组或用实验环境允许的方式运行CPU 占用高等待循环没有休眠top查看进程 CPU加入sleep(interval)间隔 1 到 2 秒等待不退出没有超时机制手动CtrlC测试增加timeout参数超时返回时间显示异常时区或时间戳为 0看ut_tv.tv_sec是否合理用localtime转换检查系统时区用户登出后还显示记录未及时更新或没有过滤类型用户登出后再跑一次重新扫描忽略DEAD_PROCESS多会话只显示一个检测到第一个就返回用show_user_sessions查看遍历所有匹配记录统计会话数5. 可扩展方向与实验心得5.1 监测多个用户与登录登出事件基础实验只要求监测一个指定用户但你可以把它扩展成多用户监测。做法很简单把目标用户放到数组里每次轮询对所有目标调用is_user_logged_in给每个用户维护一个状态从未登录变已登录时打印“上线”从已登录变未登录时打印“下线”。这样就能做一个小型登录动态面板。再进一步可以把事件追加到日志文件格式类似时间 用户 事件 终端 来源方便后续审计。注意不要记录密码、命令内容等敏感信息只记录登录元数据即可。如果你想做得更“操作系统”可以研究inotify是否能监控 utmp 变化但 utmp 更新方式特殊inotify不一定可靠轮询仍然是最简单稳妥的方案。5.2 和 last、journalctl、systemd-logind 交叉验证排查时不要只盯着自己的代码。last看历史登录who看当前会话w看当前会话和活动loginctl list-sessions看 systemd 管理的会话journalctl -u sshd看 SSH 登录日志。它们的数据源不完全相同交叉验证能快速定位问题。比如who有记录但程序读不到说明是代码或权限问题who没有但loginctl有说明系统走的是 logind 路线传统 utmp 不完整last有历史但who没有说明用户已经退出当前没有活动会话。实验报告里写清楚这些工具的差异比只贴代码更能体现你对操作系统原理的理解。5.3 我在这个实验里踩过的坑我最早写这个实验时犯过一个典型错误用strcmp比较ut_user结果偶尔崩溃或误判。后来才意识到 utmp 是二进制结构字段不一定以\0结尾必须用长度受限的比较。第二个坑是忘记endutent()短时间内反复打开可能影响资源虽然实验里不明显但不是好习惯。第三个坑是轮询间隔设成 0.1 秒程序跑起来风扇狂转改成 2 秒后世界安静了。第四个坑是只过滤了用户名没有过滤ut_type结果把LOGIN_PROCESS也算成已登录验收时被指出逻辑不严。第五个坑是在容器里做实验折腾半天发现容器根本没有宿主机的 utmp。把这些坑提前避开实验会顺很多。5.4 数据边界与合规提醒登录监测涉及用户会话信息虽然 utmp 里没有密码但用户名、终端、来源地址、登录时间也属于需要谨慎处理的数据。实验环境下自己测试没问题如果要把代码用到真实生产环境必须遵守单位的安全规范控制读取权限日志文件设置合适权限避免把来源地址、账号信息随意暴露。程序只读 utmp不要尝试写入或篡改否则可能影响系统登录记录。对于多用户服务器建议只做必要的状态判断不采集无关信息。把边界想清楚代码才既好用又稳妥。最后再分享一个实际习惯我通常会把轮询间隔做成命令行参数默认 2 秒把超时设成 0 表示无限等待验收时再用 30 秒或 60 秒快速演示。测试时先开一个终端跑监测程序再开另一个终端用目标账号登录观察输出从“尚未登录”变成“已登录”顺便检查终端名和来源是否符合预期。如果你在图形界面或容器里测不出来就换到纯 SSH 或本机 tty 环境传统 utmp 在这种场景下最老实也最能验证你对操作系统登录机制的理解。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

人永远都不够用,事永远都没人做!二三十人的公司,都开始转不动... 2026/9/30 11:02:19

人永远都不够用,事永远都没人做!二三十人的公司,都开始转不动...

你是不是也有这种体会:招聘从来没停,但总感觉缺人手。三十来个员工,人人都喊忙,新增任务根本派不下去。客户消息积压无人回应,周报反复催促才能收齐,一份报价单流转四人依旧没人拍板;新人入职三…

阅读更多 →
VMware 仅主机(Host-Only)模式:虚拟机 ↔ 物理机互通完整教程 2026/9/30 11:02:12

VMware 仅主机(Host-Only)模式:虚拟机 ↔ 物理机互通完整教程

文章目录一、前置检查(Windows宿主机)二、配置IP,保证同网段方式1:DHCP自动获取(最简单)方式2:静态IP(推荐,IP固定,适合端口映射/文件共享)三、连…

阅读更多 →
SUAPP AI 是出图工具还是建模工具:按官方资料和一次同场实测把它拆开记 2026/9/30 11:01:52

SUAPP AI 是出图工具还是建模工具:按官方资料和一次同场实测把它拆开记

记录日期:2026年9月29日。实测数据来自 2026年9月23日的一次非盲测、单轮测试。本文不构成产品排名、购买建议或性能承诺。在建筑 AI 工具的讨论里,SUAPP AI 经常被归进"出图/渲染"那一类。这个归类不算错,但它只覆盖了一半&#x…

阅读更多 →
AI科研工具赋能学术创新:助力科研效率提升与前沿研究突破的实用指南 2026/9/30 11:01:44

AI科研工具赋能学术创新:助力科研效率提升与前沿研究突破的实用指南

作为研究生,文献海量、实验乱飞、论文卡壳、组会频繁……一天不高效就落后别人十条街! 今天我精选2026年最火的4款纯AI驱动科研神器,切问学术打头阵,从文献精准挖宝到写作一键起飞、总结自动化、数据提取零压力,全流程…

阅读更多 →
10分钟上手Minimax-H3-ComfyUI:ComfyUI视频画质增强从零到首条成片完全教程 2026/9/30 11:01:44

10分钟上手Minimax-H3-ComfyUI:ComfyUI视频画质增强从零到首条成片完全教程

10分钟上手Minimax-H3-ComfyUI:ComfyUI视频画质增强从零到首条成片完全教程 【免费下载链接】Minimax-H3-ComfyUI 项目地址: https://ai.gitcode.com/hf_mirrors/Alissonerdx/Minimax-H3-ComfyUI Minimax-H3-ComfyUI 是一套专为 ComfyUI 打造的视频画质增强…

阅读更多 →
vmware搭建华为自研openEuler系统 2026/9/30 11:01:44

vmware搭建华为自研openEuler系统

利用vmware搭建华为自研openEuler系统 选择linux内核设置虚拟机名称及存储位置设置cpu数量和每个核数,这边我设置了一个cpu,两个核,因为这样速度快设置内存大小设置网络类型为NAT模式设置该磁盘为单独磁盘设置网卡地址,确保都在同…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉