惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
C
Cybersecurity and Infrastructure Security Agency CISA
IT之家
IT之家
罗磊的独立博客
阮一峰的网络日志
阮一峰的网络日志
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
L
LINUX DO - 最新话题
C
Cyber Attacks, Cyber Crime and Cyber Security
Cyberwarzone
Cyberwarzone
S
SegmentFault 最新的问题
S
Schneier on Security
A
About on SuperTechFans
L
Lohrmann on Cybersecurity
博客园_首页
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Securelist
博客园 - 司徒正美
H
Hacker News: Front Page
Jina AI
Jina AI
K
Kaspersky official blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
J
Java Code Geeks
B
Blog
Google DeepMind News
Google DeepMind News
博客园 - Franky
The Cloudflare Blog
M
MIT News - Artificial intelligence
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
Spread Privacy
Spread Privacy
N
News and Events Feed by Topic
A
Arctic Wolf
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
宝玉的分享
宝玉的分享
T
The Blog of Author Tim Ferriss
O
OpenAI News
N
Netflix TechBlog - Medium
G
GRAHAM CLULEY
F
Fortinet All Blogs
V
V2EX
N
News | PayPal Newsroom
Y
Y Combinator Blog
雷峰网
雷峰网
博客园 - 叶小钗
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Recent Commits to openclaw:main
Recent Commits to openclaw:main

编程

软件工程真的一直在进步吗? - V2EX 我开始在代码中使用中文变量名了 - V2EX 软件工程里,最昂贵的成本到底是什么? - V2EX [转载]信创全平台 C++17 交叉编译工具链 - V2EX AI 正在淘汰小众编程语言 - V2EX 在 Codex 中可以直接调用 Claude 吗? 氛围编码生成的是代码,工程生成的是系统。氛围编程不是工程,大家怎么看? Tikrok8 新版本更新 被 composer 2.5 震撼了 在 AI 时代,现在的新项目大家怎么开始呢? [纯分享]怎么同时学会多个编程语言 现在 rust 是不是好起来了? - V2EX 用 just 管理终端命令,使“命令即代码” - V2EX Qoder teams 版本设计反人性 - V2EX AI 写代码真香喷;以后只要产品经理就可以了 - V2EX warp 有没有什么代码补全和格式化的方案,想代替 cursor - V2EX 被 KIMI 玩弄的一天 这么 lj 我是没想到的 - V2EX pyruns:把本地 Python 实验和 shell 任务真正整理起来的 Web UI - V2EX AI 写的项目要怎么维护?都是一次性代码吗? - V2EX claude-opus-4-6 大家实际使用感觉怎么样? - V2EX 关于加强学习效率的讨论 - V2EX 想用下智谱的 GLM 和 Minmax 的编程模型,有没有用过的分享下使用效果 - V2EX 设计后台微服务还是 mq - V2EX 发一个更新版的 rules - V2EX Claude Opus 4.5 发布了,前端工程师的天,塌了又塌(AI 计量单位) - V2EX codex 的一些小感受 - V2EX agent 开发据说很有前途 - V2EX 有人实际遇到(或感知到)过比特翻转或数据静默损坏么? - V2EX 没钱就只能将就着用 Trae 和免费模型吗? - V2EX AI 编码的一个细节 - V2EX 网站 favicon 图标自动获取接口 - V2EX 求问单生产者场景使用消息队列是否过度设计? - V2EX 能替代 cursor autocomplete 的方案有哪些? - V2EX 一个 PHP 的博客程序,让 Claude 用 Go 重构,当前靠谱吗? - V2EX 从零开始的 AI 导航站:现在免费提交,有必要开通支付吗? - V2EX 在命令行使用 claude code /qwen code 和在类 cline 插件中使用有什么区别? - V2EX 新红、矩阵通、新榜这种平台,数据到底是怎么获取到的? - V2EX cursor 自定义 model 报错,真报错还是搞小动作? - V2EX springboot 并发调用存储过程 - V2EX 全开源跨平台桌面 app 开发框架 soui5 成功完成 windows, Linux ,macos 三端适配 - V2EX 求英文编程社区提问新手教程 - V2EX 说真的朋友们,有被感动到 - V2EX 让 Agent 能根据 Prompt 自主选择 MCP tools,实现要怎么处理? - V2EX 求助!使用 AI 生成低代码数据的方案 - V2EX 为什么公有模型和私有模型使用效果很大差异 - V2EX cursor 还能用了吗? - V2EX 从 markdown 编辑器直接复制内容到微信公众号平台保持样式不变,这是怎么做到的? - V2EX AI 写代码比我好,一直不动脑子,不太会写代码了 - V2EX 编程真无聊啊 - V2EX 开源架构推荐 - V2EX Cursor 对比 Windsurf - V2EX Windsurf 代码补全失效 - V2EX 项目快写完才发现白写了 - V2EX 想用 ImGui 做点桌面的小工具练练手,请教一下大家有什么思路? - V2EX 常用大模型编程项目得分排名 04-19 - V2EX 请问, AI 时代,新手入门编程开发,应该选择哪个语言? - V2EX 无需服务器部署官方 qq 机器人 这种后台接口设计是否合理 - V2EX ai 编程怎么选工具 nextjs 能把人逼疯
请教 Hammerspoon 在获取 WIFI ssid 为 nil 问题 - V2EX
z1gui · 2025-12-10 · via 编程

最近痴迷用 Hammespoon 去简化自己的某些操作。用 chatgpt 写了个根据 Wifi ssid 切换网络位置的 lua 脚本。看代码是没啥问题的,但是在获取 Wifi ssid 时候为空,我以为是在切换过程中,可能先清空,然后再连接,但是用了 10s 轮询也不行。看了 chatgpt 回答的可能原因有权限问题,也可能是中国地区禁用 hs.wifi.currentNetwork() 获取 ssid 。请问有人遇到这个问题么,该如何解决

- WiFi SSID 与 macOS 网络位置的映射
local locationMap = {
    ["xxxxx"] = "office",
    ["xxxxx"]    = "home",
}

local defaultLocation = "Automatic"

---------------------------------------------------------------------
-- Debug 输出函数
---------------------------------------------------------------------
local function debugLog(msg)
    print("[WiFi-Location-Debug] " .. msg)
end

---------------------------------------------------------------------
-- 获取当前 macOS 网络位置
---------------------------------------------------------------------
local function getCurrentLocation()
    local output = hs.execute("scselect")
    debugLog("scselect 输出: \n" .. output)

    -- 只匹配带 * 的那一行,并从括号中取出名称
    local current = output:match("%*.-%((.-)%)")
    if current then
        debugLog("解析到当前位置: " .. current)
    else
        debugLog("未能从 scselect 中解析出当前位置")
    end
    return current or "Unknown"
end

---------------------------------------------------------------------
-- 切换网络位置
---------------------------------------------------------------------
local function switchLocation(newLocation)
    debugLog("准备切换网络位置到: " .. newLocation)
    local result = hs.execute('scselect "' .. newLocation .. '"')
    debugLog("执行 scselect 后返回: \n" .. result)
end

---------------------------------------------------------------------
-- WiFi 变化事件回调
---------------------------------------------------------------------
local function ssidChanged()
    local ssid = hs.wifi.currentNetwork()
    debugLog("检测到 WiFi 变化,当前 SSID: " .. tostring(ssid))

    local targetLocation

    if ssid and locationMap[ssid] then
        targetLocation = locationMap[ssid]
        debugLog("SSID 匹配映射表,将切换到位置: " .. targetLocation)
    else
        targetLocation = defaultLocation
        debugLog("SSID 未匹配映射表,切换到默认位置: " .. targetLocation)
    end

    -- 执行切换
    switchLocation(targetLocation)

    -- 延时读取切换后的实际位置
    hs.timer.doAfter(0.3, function()
        local loc = getCurrentLocation()
        hs.alert.show("当前网络位置:" .. loc)
        debugLog("最终确认当前网络位置:" .. loc)
    end)
end

---------------------------------------------------------------------
-- 启动 WiFi watcher
---------------------------------------------------------------------
wifiWatcher = hs.wifi.watcher.new(ssidChanged)
wifiWatcher:start()

debugLog("WiFi watcher 已启动")
hs.alert.show("WiFi 自动切换网络位置( Debug 版)已启动")