Normal view

There are new articles available, click to refresh the page.
Before yesterdayMain stream

实测豆包一键修图,拍照小白有救了|附修图指令

By: 周奕旨
4 August 2025 at 15:20

照片后期,向来是横亘在普通人与「大片」之间的一道坎。

专业人士为此耗费心力,将拍摄后的数小时投入到电脑屏幕前,与各种曲线和图层搏斗;普通爱好者更是 常常因为摸不透 Photoshop 和 Lightroom 里那些天书般的工具而望而却步。

我们似乎都默认,一张出彩的照片,必然需要高超的后期技术。

不过,前两天登上热搜的「豆包修图」让我眼前一亮。

在 AI 大行其道的当下,修图这件事或许真的可以变得无比轻松:你只需要用一句话交代你的想法,AI 就能帮你 P 出一张心仪的大片。

对 AI 来说,题材不再是难事儿

摄影作为一门古老的艺术,早已分化出人像、风光、美食等诸多门派。

过去,每个门派都有自己秘不外传的后期心法,而现在,AI 就像一位打通了所有门派经脉的武林高手,用一套大力出奇迹的算法,通吃各种题材。

风光摄影师常常为了等待一个完美的天气和光线而起早贪黑。

可如果运气不好,拍到一张天空惨白的照片,后期处理起来就相当麻烦——需要创建复杂的蒙版,把天空和地面分开,单独进行调整。

但有了AI,这一切变得像点外卖一样简单。

我将一张照片分别用 Photoshop 和豆包进行处理,照片拍摄于入夜前,但厚重的云层挡住了壮观的落日,同时也大幅度压低了画面的亮度,观感暗沉。

修图的目的是替换掉原本不够漂亮的天空,你能一眼分辨出哪张是 AI 修的,哪张是我手动修的吗?

揭晓答案——左边是我在不到五分钟内用 Photoshop 手动处理的结果,右边则是豆包在几十秒内生成的版本。

乍一看两者效果相近,但作为亲手操作过两个版本的我来说,这其中的差别一目了然。

按照传统的修图流程,我需要手动精细抠出天空,保留地面树枝的细节;接着再寻找合适的晚霞素材替换原本厚重的云层,并统一天空与地面的色调与亮度,以保证整张图的色彩和谐。

而在豆包中,我只需要一句话提示,就能直接生成这样一张几乎完成度极高的图片。

▲ 原本复杂的操作,对 AI 一句话的事儿

放大查看细节后,尽管在极限放大下,AI 图像的画质略逊于手动处理版本,但豆包依然保留了树林与天空交界处的细节,地面亮度与色温也同步优化,整体画面协调自然,展现出相当成熟的修图逻辑。

▲ 豆包处理的天地交界,比我两分钟处理出来的更精细

日常风景照片的另一个难题,则是茫茫多的路人。

按照传统方法,你需要先将照片导入 Photoshop,用污点修复画笔或仿制图章工具,放大到 300% 进行精细处理。

在涂抹路人的同时,还得纠结到底是用内容识别还是近视匹配,若是遇到复杂纹理,还得手动创造纹理,繁琐至极。

▲ 掌握这些工具,是传统后期的第一步

但对于 AI 来说,这也不过是分分钟的事——

在不到一分钟的等待后,我收到了处理完成的照片:不仅保留了原图的色调与画质,还精准去除了所有路人。

尤其令人称赞的是,AI 在清除人物的同时,还细致地保留了右侧江岸岩石的阴影细节,没有出现常见的粗糙涂抹痕迹,整体效果令人非常满意。

▲ 使用 ChatGPT 去除路人

光影重塑是风光摄影进阶的修图技巧,指的是摄影师在后期处理中,根据照片的不同表现,运用蒙版、画笔等工具,精细调整局部画面。通过顺应直觉和逻辑的方式,重构整体光线效果,营造明暗对比,从而突出主体,渲染氛围,提升照片的视觉冲击力。

停!

我知道,这么一大串讲完,你已经迷糊了,简而言之,光影重塑就是根据个人审美与技术,调整出更具冲击力和逻辑感的照片。

过去,要做到这一点,不仅需要熟练掌握 Photoshop 的各种工具,还需要对光线有一定的理解和控制能力,以及出色的审美,才能做出既不夸张又恰到好处的光影效果。

▲相信我,你不会想学这套流程的

而现在,交给 AI 也就是一句话的事儿——

在简单交流后,AI 为这张照片按照风光摄影的修图思路进行处理,给画面添加了遮盖无用细节的平流雾,让其覆盖较低的楼房,营造出朦胧氛围;

同时进行光影重塑,从画面原本的光影逻辑出发,加强了阳光在建筑面上的反射效果,使画面光影合理、有层次感,突出了东方明珠的主体性。

▲ 使用 ChatGPT 光影重塑

同样的方法,我们也可以挪用到相册中另一个不能忽视的大种类上——宠物和人像。

这里指的不是磨皮、面部重塑等因人而异的主观调整,而是 AI 可以按照一定的逻辑帮你润色画面的光影,营造特别的氛围,以达到手机无法直出的质感。

除了光线调整,在这类照片中,用 AI 添加道具,营造特殊的氛围,也是另一种玩法。

就像前面的一句换天一样,你可以用一句指令让 AI 为画面中添加一些符合环境的元素,比如漫天飘散而下的黄叶,或是从窗台倾泻而入的阳光。

再将脑洞打开一些,如果遇上不满意的天气,你可以让 AI 换一下天空,顺带注意处理好人物的光线,得到一张毫不违和的照片。

▲ 雪景也是不错的选择

风景和人物宠物解决了,还有一个重要的题材不能忘记——美食。

如果按照传统方法,摄影师需要精确校准白平衡,防止任何偏色都会让食物看起来不新鲜。

进入后期,还要小心地提高清晰度,但又不能过头,否则食物会显得干瘪,毫无食欲;接着还要利用色调曲线和 HSL(色相、饱和度、明度)滑块,精确地调整每一种颜色的表现,让色泽更诱人。

在这方面,AI 也可以帮上大忙。

润色后的照片层次更为分明——冷吃兔与鸡肉裹满红亮油润的酱汁,表面铺满鲜红辣椒段,点缀其间的金黄花生米酥脆诱人,视觉与味觉的冲击感扑面而来,瞬间唤起食欲。

可以说,在 AI 的帮助下,你已经跨过了曾经逾越在普通人与大片之间的那道高墙,拥有了「言出法随」般的修图能力。

但魔法并非总能随心所欲,想要精准地实现心中所想,「咒语」是关键。

对 AI 讲话,有些诀窍要注意

用 AI 修图看起来很新鲜,但背后其实就是我们熟悉的文生图的进阶应用。

顾名思义,AI 从我们这里获取一段描述,并从中理解我们的意图,最后生成出符合它理解的图片。

这里的难点在于,什么样的话是 AI 容易理解的呢?

我准备了一张想要处理的照片,以豆包为例,尝试不同提示词的效果。

第一次,如果我简单描述:

将这张照片 P 好看。

此时,AI 对照片进行了一定的基础处理,我们可以明显看到画面对比变得更强了,颜色也更加浓郁,但我对这样的处理并不算满意——

这张照片拍摄于傍晚,最大的问题在于画面不够通透,层次也不够丰富,相比提升对比度和饱和度,我其实更希望从整体风格上进行调整。

回头看我的提示词,只有一句模糊的「好看」,但「好看」本是一个极其主观的感受,AI 无法隔着屏幕感知使用者的审美偏好,只能依靠预设的主流美学风格帮忙处理图片,最后就得到了一张「饱和度战士」。

但如果将描述改为:

将这张照片的拍摄时间改为蓝调。

有了更明确、客观的描述,AI 生成的图像也明显更符合需求,在观感自然的基础上,蓝调更突出了,画面的冷暖对比也更为强烈,但这样还不够——

单一维度描述的咒语还不够精准,AI 可能会出错,同时由于日落与城市开灯之间有时差,所以拍摄时城市还没有亮起灯光,照片本身并没有体现出城市的繁华,这比较遗憾。

想要这张照片更好看,我们可以为 AI 准备一个更全面的建议。

所以,我们进一步将描述扩充为:

将这张照片的拍摄时间改为蓝调,为画面中的建筑物添加一些符合逻辑的灯光,远处高大的建筑可以添加示廓灯,为画面打造内透效果,注意灯光的合理性。

从更多角度描述我们意图的提示词,得到了非常不错的效果,AI 在凸显蓝调的同时,顺利为图片中的建筑物添加符合逻辑的灯光,打造出一张富有层次感的城市夜景照片。

到了这里,我们可以总结出一套方法论,来为 AI 提供精准的描述,以尽量准确的方式传达我们的意图——

「主体 + 时间/环境 + 光线/色调 + 风格/情绪 + 特殊效果 + 细节约束」

公式由六个部分组成,六个部分分别代表了一张照片的各个维度:

  1. 主体:你希望 AI 处理的核心对象,如:这张人像照片、这张城市夜景
  2. 时间/环境:希望照片呈现的时间或自然条件,如:傍晚、蓝调、清晨、下雪天
  3. 光线/色调:想要强化或改变的视觉氛围,如:暖色调、冷光、日落光影、通透感
  4. 风格/情绪:照片整体想传达的感觉或调性,如:繁华都市、静谧夜景
  5. 特殊效果:希望额外添加或修饰的视觉元素,如:添加建筑灯光、水面倒影、天空星星
  6. 细节约束:对 AI 输出的合理性、真实性的补充要求,如:灯光符合建筑逻辑、注意真实透视、避免过度磨皮

按照这个公式,我们可以最大程度地掌控照片中的各个元素,越全面,AI 能理解就越精准。

依旧是这张照片,我们用这条公式的方法来撰写提示词,试试 AI 能不能给我们提供另一种风格的照片:

这张照片(主体)改为雨天拍摄,此时正值入夜前的傍晚(时间),为画面添加一定的雾气,雨水与雾气被建筑灯光打亮,在空中连成丝线,雾气可以盖住部份建筑(特殊效果),同时按照逻辑重塑光影(光线),注意不要改动删减照片中已有的建筑和元素(细节约束)。

雾气自然、影调和谐,积雨的屋顶还有符合逻辑的光线反射,这张照片的确出乎意料——

以往需要繁杂后期才能实现的效果,现在不到 30 秒就能轻松获得。

需要一提的是,在我试过的几十张照片中,修图效果最强的是豆包,其次是 ChatGPT,文中总结出的提示词公式,在这两个 AI 上都能取得相当不错的效果;

而 Gemini、Qwen 等 AI 工具则更倾向于重绘,照片改动痕迹较重,相较之下更推荐前两者进行精修润色。

玩到这里,我一边感叹 AI 的确强大——不需要任何修图基础,只需要提供完整的想法,就可以得到一张处理得八九不离十的照片;

但另一方面,一个有些老生常谈,但的确没办法忽视的矛盾,开始拷打我的内心。

照片的「真实」,到底在哪里?

在 AI 技术的加持下,我们的创作和表达变得前所未有的自由和丰富。

修图不再是专业人士的专利,普通人也可以轻松地通过 AI 实现照片的修饰与再创作。

不过,当我们沉浸在用 AI 把自家猫咪 P 成宇航员的乐趣中时,一个纠葛已久的矛盾,也随着而来:

在一些人眼里,AI 修图让照片背离了现实,变得虚假;而另一部分人认为,这只是自娱自乐,何必用如此严格的要求去度量一张照片。

在技术交替的时期,类似这样的理念之争并不稀奇,甚至已经有了愈演愈烈之势。

德国摄影师 Boris Eldagsen 在用一张 AI 生成的图片赢得索尼世界摄影奖后,主动拒绝领奖,并公开了图片的 AI 身份。

在世界级的专业摄影比赛上整这种活儿,并不是一个玩笑——他想以此引发人们的讨论,并强调我们必须区分用光写作(摄影)和用提示词写作(AI 生成),以保护照片的公信力。

▲ 赢得索尼世界摄影奖的 AI 作品《假记忆:电工》,由 DALL-E 2 生成

不过,这场关于真实的辩论,或许从一开始就混淆了两个不同层面的问题,我们必须区分两种不同的语境:一种是「公共领域的真实」,另一种是「个人表达的真实」。

对于法庭上的证据,或是《纽约时报》的头版照片,客观、可验证的真实性是其生命线,一张照片的来源——由谁、在何时、何地、为何拍摄——是判断其价值的根本标准。

在这种语境下,任何未经声明的修改都可能构成欺骗。

▲ 能将特朗普 AI 成猫猫吗?恐怕改不得

但对于你的朋友圈来说,真实的含义则完全不同。

在数字世界的私人领地里,我们追求的往往是一种情绪的真实、一个笑话的真实或一种审美的真实。

是的,当看到一张猫猫正在帮忙做饭的图片时,我们不会感觉自己被欺骗了,只会被逗乐。

▲ 我给爸妈说猫猫给我养老,我爸妈也不会和我急眼

这里的真实无关乎事实,而关乎表达。

这或许才是普通人拥抱 AI 修图的真正原因——在个人表达的领域里,意图是事实更重要的准绳。

一位新闻记者的意图是见证,他有责任尽可能忠实地记录事件;而一个普通人的意图是表达,他有权利通过各种方式来传达自己的情感和创意。

所以回到最初的问题,去吧,大胆地让赤道下雪,让猫咪登月。

在这个 AI 的时代,在你的私人世界里,想象力是唯一的边界。

让我有个美满旅程

#欢迎关注爱范儿官方微信公众号:爱范儿(微信号:ifanr),更多精彩内容第一时间为您奉上。

爱范儿 | 原文链接 · 查看评论 · 新浪微博


AI Graph Maker – 免费不登录 AI 生成统计图表,简单美观的数据可视化工具

By: Anonymous
8 January 2025 at 17:44

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

AI Graph Maker 是一个帮助用户快速生成图表的在线工具,通过 AI 整理输入的数据和提示词,再将数据以图表方式输出,在几秒钟快速生成专业的图表,同时还能调整不同的图表配色,如果发现生成的图表有些小问题也能通过编辑功能调整数据。

依照说明 AI Graph Maker 可以制作各种类型的图表,包括扇形图、折线图、条形图、流程图、时间轴、ER 图、思维导图和甘特图等等,默认情况会自动识别、选择最合适的类型,有需要也能手动指定。

最后可以将图表快速下载为 PNG 格式,整个过程无需注册账户,无论是新手或是专业人士都能轻松上手。

使用 AI 图表生成器轻松创建各类图表。将您的数据转换为定制的柱状图、折线图、流程图、饼图和散点图。

进入 AI Graph Maker 后会看到功能介绍、可通过 AI 图表制作工具生成的图表类型,要注意目前不同语言版本的制作工具不一样,使用英文或简体中文的版本功能会比较多,而且制作出来的图表更好看。

AI Graph Maker – 免费不登录 AI 生成统计图表,简单美观的数据可视化工具

点击 AI 图表生成器下方的示例,可以快速带入测试用的内容,例如生成销售数据条形图、网站流量分析折线图、部门员工人数扇形图或是比较学生学习表现的雷达对比图。

右下角有一个「图表类型选择」栏位,默认情况下会「自动」判断,用户可依照需求手动选择,AI Graph Maker 当前支持的类型包括折线图、条形图、雷达图、扇形图、树形图、散布图、关系图、桑奇图、漏斗图。

下图就是使用 AI Graph Maker 示例制作出来的图表,用户只需要将相关数据直接贴上,AI 就会进行后续处理并生成图片,整个过程几秒钟就完成了,可以说非常强大。

我也试着去找一些数据作为示例,搭配上提示词〔要求 AI 将内容制作为图表〕,点击右下角「AI 生成」。

AI Graph Maker 就将条形图制作出来,还能依照用户需求更改单位、显示名称或其他呈现方式。

从图表右下角按钮找到「调色盘」选项,快速将图表切换为不一样的配色组合。

使用不同语言版本生成的图表文字会转成相应语言,可以点击一下右下角「编辑图表数据」按钮就能修改,编辑图表中每个项目的显示文字和数字。

最后,找到图表右下角的「下载」按钮即可将图表保存为 PNG 格式。

Image to Prompt – 免费 AI 图片转提示词工具,一键生成 Midjourney、Stable Diffusion 关键词

By: Anonymous
21 November 2024 at 16:42

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

Image to Prompt」是免费的图片转文字工具,将图片上传、几秒钟就能准确识别转为提示词,将生成内容复制后使用在其他的 AI 图片生成器,例如 Flux1、Stable Diffusion 和 Midjourney 等应用程序,识别速度很快,转换后图片就会删除,服务器不会储存用户上传识别的图片资料。

Image to Prompt 网站宗旨是帮助用户撰写更好的图片提示词,从而让用户能够更好的使用图片 AI 工具生成各种图片,如果有需要获取图片提示词灵感,从图片直接转换文字、稍作修改调整应该是最快的方法。

Upload your image, and it will be convert image to prompt in just seconds.

进入「Image to Prompt」网站后直接把要转换为文字的图片拖曳到左侧上传栏位〔或是点击下方的示例图片直接带入进行测试〕,接着点击右上角「Start convert」就会开始识别、转换。

几秒钟后右侧就会显示英文的图片提示词,将这段文字使用在其他 AI 图片生成器就能生成近似的图片,有需要也可以修改部分内容,相较于从零开始撰写提示词先使用生成器转换会是更快的方法。

如果图片的主题是人物,Image to Prompt 也能正确识别并提供相关信息。

Image to Prompt – 免费 AI 图片转提示词工具,一键生成 Midjourney、Stable Diffusion 关键词

Stirling PDF – 免费开源的 PDF 编辑工具,拥有超过 30 个的全面功能

By: Anonymous
16 October 2024 at 12:50

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

Stirling PDF 是一站式的 PDF 编辑,让用户能对 PDF 文件进行各种编辑操作,包括分割、合并、转换、重新组合、新增影像、旋转、压缩等等,特色是免费、开源GitHub〕,过程中文件只会存在用户的设备上,若在处理时有暂存于服务器的内容在下载后会即时从服务器删除,不会记录保存或追踪任何资料,相较于在线工具来说是更安全、的解决方案。

1 Locally hosted web application that allows you to perform various operations on PDF files – Stirling-Tools/Stirling-PDF

Stirling PDF 提供多元的 PDF 编辑功能,涵盖文件组织、格式转换、安全性、检视与编辑等工具,满足各类文件处理需求,用户无需额外下载、安装软件,只要通过即可进行操作,Stirling PDF 有中文在内等多国语言界面〔在我写这篇文章时中文字串翻译率已达 93%〕,进入、找到对应的功能后就能直接进行编辑。

这项服务目前可以做到的功能包括:

1. 文件组织

2. 格式转换

3. 签名与安全性

4. 检视与编辑

5. 进阶功能

顺带一提,Stirling PDF 还有提供 Windows 版本,可以在没有连上的情况下使用,如果有兴趣的朋友可以在 GitHub 找到下载链接,原则上两者功能差不多,无论在线版或 Windows 程序都不用付费、也无广告干扰。

Stirling PDF

进入 Stirling PDF 网站后先从右上角语言选择「中文」。

Stirling PDF – 免费开源的 PDF 编辑工具,拥有超过 30 个的全面功能

接着从上方「工具」就能看到完整功能,依照类型分为:组织、转换为 PDF、从 PDF 转换、签名与安全性、检视与编辑和进阶工具,也可以直接从首页输入功能名称列出相关工具。

有一个 PDF 万用工具是整合旋转、裁切、分割、移除、新增图片等功能,进入后先点击左下角新增要编辑的 PDF 文件。

加入后 PDF 页面预览就会显示于下方,每一页都可单独旋转、删除或调整页数,将光标到页面中间时还会出现其他编辑选项,例如裁切或是加入图片,其实操作上很直觉,稍微摸索一下就会。

编辑完成别忘记点击右上角「下载」保存新的 PDF 文件。

另一个压缩 PDF 也是很常在在线工具看到的功能,选择文件、设置压缩比或是自动模式〔自动调整质量以使 PDF 达到指定大小〕,就能快速压缩 PDF 以获得更小的文件容量。

点击压缩后就会开始处理,完成后自动跳出下载提示,我以大约 9 MB 的 PDF 文件、手动模式 3 级测试后获取一个约 2.5 MB 的新文件,压缩成效相当好,而且图片并没有失真或模糊等情形。

另一个也很常用到的功能是「分割 PDF」,可以将 PDF 指定页面删除、或只是留下需要的页面,使用方法也很简单就不多加赘述,Stirling PDF 会有预先设置的示例提示,用户照着格式稍作修改后就能完成相关编辑任务。

如果要说 Stirling PDF 有没有比较特殊、少见的功能,有一个「自动涂黑」工具很有用,用户只要输入要涂黑的文字,选择 PDF 后就会自动将识别到的文字涂黑,确保隐私和安全性,同时也省去手动编辑文件的时间,操作上更有效率哦!

下图就是使用自动涂黑工具识别、涂黑的 PDF 文件示例,指定文字就会被涂黑处理。

Windows 环境下 Maven 的安装以及代理设置

25 August 2024 at 17:52

访问 Maven 的下载页面:https://maven.apache.org/download.cgi (可能需要梯子)

点击 Link 下载 Binary 版本即可。此处我们下载的文件中包含了可执行文件。完成下载之后我们需要将这些文件放到一个较为固定的位置,然后设置环境变量以便于我们在命令行环境能够正常访问这些脚本。

Maven 具有包管理器的作用,这类应用在国内都面 GFW 的问题,因此需要需要将 Maven 接入代理以便其能够正常下载以来资源。设置方式是在当前用户目录下 .m2/settings.xml 文件(如果没有此文件需要手动创建),并在此文件中添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<settings>
<proxies>
<proxy>
<id>local-proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>localhost</host>
<port>port</port>
<!-- 如果你的代理需要身份验证,可以取消下面的注释并填写 -->
<!-- <username>your-username</username> -->
<!-- <password>your-password</password> -->
<nonProxyHosts>localhost</nonProxyHosts> <!-- 可选:不使用代理的主机 -->
</proxy>
</proxies>
</settings>

注意将其中的地址和端口设置替换成你自己的 HTTP 代理的地址和端口。

引发 LTO 优化后续错误的一种可能及解决方法

31 May 2024 at 14:02

最近开发 C++ 的程序在链接阶段发生了一个 LTO 相关的错误。链接时优化(Link Time Optimization, LTO) 是一种编译优化技术,旨在通过在链接阶段执行全程序优化来提升代码性能和减少二进制文件大小。其主要原理是在链接阶段而不是在编译阶段进行更高级的优化,允许跨文件的全局优化。LTO 的基本原理和过程是:

  • 中间表示:在编译阶段,编译器将每个源文件编译为一种中间表示(如 LLVM bitcode),而不是直接生成目标代码。
  • 全局优化:在链接阶段,链接器将所有中间表示文件合并,生成一个完整的程序表示。此时,优化器可以进行跨文件的全局优化,如函数内联、去除冗余代码和跨模块优化。
  • 生成目标文件:优化完成后,链接器生成最终的可执行文件或库。

我遇到的错误信息中的管件一句是:

1
attempt to add bitcode file after LTO (htons)

可以看到错误信息提示我们链接系统试图在 LTO 优化之后添加 bitcode。并且在后面的括号中链接器提到了一个符号 htons,这是来自 libc 库的一个符号。基于的 https://github.com/emscripten-core/emscripten/issues/16836 这个链接中的启发,我发现了一个 LTO 优化可能面临的普遍性问题。这个问题是 LTO 会尝试移除一些它认为不需要的符号从而减少编译出来的程序的体积,但是这个判断可能会不准确。它可能将一些实际会被使用的符号删除。为了解决这个问题,我们可以为链接器指定链接输入,强制保留指定的符号以避免错误的移除。针对我遇到的情况,为链接器加上 -Wl,-u,htons 的配置即可解决问题。

  • -Wl: 这个标志告诉编译器将接下来的选项传递给链接器(ld)。-Wl,option 是传递给链接器的标准方法。
  • -u,symbol: 这个选项告诉链接器强制包含指定的符号 symbol。在这个情况下,-u,htons 和 -u,htonl 告诉链接器强制包含 htons 和 htonl 函数

Unraid: 解决 12 版本中网页界面无法打开的问题

17 August 2023 at 10:36

最近在 Unraid 升级 6.12.x 版本以后会偶发性的产生一个 Bug,其表现为 Unraid 网页无法打开(这里是指访问 Unraid IP 地址无法访问 Web 管理界面)。这个问题实际上是由于 Unraid 上的 Nginx 服务失去响应导致的。这种情况下我们只需要干掉 Nginx 进程并重启就可以了。

首先通过 ps -aux | grep nginx 找到 Nginx 主进程的 PID,然后通过 kill -9 <PID> 干掉进程。要再次启动 Nginx,可以运行

1
2
cd /etc/rc.d/
./rc.nginx start

注意通过 ./rc.nginx restart 在正常情况下可以重启 Nginx 服务,但是在 Nginx 处于无法响应的状态时,这个脚本无法杀死 Nginx 进程,必须要手动终止。

Ubuntu 中如何彻底删除一个用户

16 August 2023 at 18:51

在 Ubuntu 中彻底删除一个用户涉及到几个步骤,不仅仅是删除用户,还可能包括删除与用户相关的数据。以下是步骤指南:

  1. 确保用户未登录: 在删除用户之前,最好确保该用户未登录。你可以使用 who 命令来检查哪些用户当前已登录。

    1
    who
  2. 删除用户: 使用 userdel 命令删除用户。如果你还希望删除用户的主目录和邮件池,可以使用 -r 选项。

    1
    sudo userdel -r username

    其中,username 是你想删除的用户的用户名。

    注意:-r 选项会删除用户的主目录(通常是 /home/username)。确保你已经备份了所有重要的数据!

  3. 检查文件系统: 即使删除了用户和其主目录,可能仍然在文件系统上遗留一些属于该用户的文件。你可以使用 find 命令来搜索这些文件:

    1
    sudo find / -user username

    这将列出所有属于 username 的文件。根据你的需要,你可以手动删除这些文件或更改它们的所有权。

  4. 删除用户的 cron 作业: 如果用户配置了任何 cron 作业,你还需要手动删除它们。检查 /var/spool/cron/crontabs/username 是否存在,如果存在,删除它。

    1
    sudo rm /var/spool/cron/crontabs/username
  5. 其他服务或配置: 如果该用户有其他特定的配置,例如在 /etc/sudoers 中的条目或在其他服务中的特殊访问权限,你需要手动检查并删除它们。

请在进行任何删除操作之前确保备份所有重要数据。确保你明确知道正在执行的操作,避免意外删除重要文件或配置。

解决在 Openvpn 客户端中部署的 Web 服务不可用的问题

4 April 2023 at 17:32

遇到这样一个蛋疼的问题,我有一台服务器,上面部署了一个 web 服务,同时我也想把这个服务器作为客户端连入一个 OpenVPN 虚拟网络,并且我希望服务器上的程序能够通过 OpenVPN 的网关来访问外部网络,这主要是为了隐藏服务器的身份。但是在 OpenVPN 连接之后,原有的 Web 服务将无法访问。通过调试分析可以法线,造成这一现象的原因是 Web 服务的响应包也被路由配置路由到 OpenVPN 的 tun0 接口中。这导致响应无法返回给原来的请求服务器。如何解决这个问题呢?

如果你在网络上搜索这类问题你会发现各种文章给出的方案一般都是为 OpenVPN 的配置文件添加 route-nopull 选项来阻止 OpenVPN 设置客户端路由,但是这会导致客户端的对外访问无法通过 VPN 进行。事实上,从 IP 路由的角度来看,如果我的服务器是 A,而某个访问 Web 服务的 IP 是 B,同时 B 也可能是 A 试图访问的外部的目标服务提供者。对传输层路由而言,A 给 B 的 Web 服务响应和 A 主动发往 B 的请求是无法区分的。从这个角度来看,要达成 inbound 和 outbound 流量分别路由似乎是不可能的。

但是其实我们有一个突破点:那就是 Web 服务总是在本机使用固定的端口和请求者通信,我们可以通过端口来区分 inbound 和 outbound 流量。首先我们输入下面的命令:

1
iptables -t mangle -A OUTPUT -p tcp -m multiport --sports 80,443 -j MARK --set-mark 1

在这个命令中,我们会让路由表观察从本地的 80 和 443 端口发出的包,并给这些包打上一个特定的标签(--set-mark 1 的作用)。然后输入下面的命令:

1
ip route add default via [gateway addr of eth0] dev eth0 table 100

这个命令会创建一个新的路由表 table 100,然后在这个表中加入一个默认路由,将流量送往原有的网关。然后再运行下面的命令:

1
ip rule add fwmark 1 table 100

这个命令会让带有标记 1 的包使用 table 100 路由表进行路由。运行完上面的配置后,web 服务就可以正常访问呢了。


以上方法是在 ChatGPT 的协助下摸索出来的,我的提问是:

如何通过 iptables 或者 route 命令,让访问 80 与 443 端口的包使用 tun0 接口,而访问其他端口的包使用 eth0 接口?

GPT 的回答是

可以使用iptables和route命令结合起来实现此目的。具体操作如下:

首先需要添加一条规则,将访问80和443端口的包标记为一个特定的标记值(比如"1"),使用tun0接口发送出去。iptables规则如下:

1
iptables -t mangle -A OUTPUT -p tcp -m multiport --dports 80,443 -j MARK --set-mark 1

接着需要添加一条规则,将标记为"1"的包使用tun0接口发送出去。route命令如下:

1
2
ip route add default dev tun0 table 100
ip rule add fwmark 1 table 100

最后需要添加一条规则,将所有未被标记的包使用eth0接口发送出去。route命令如下:

1
ip route add default dev eth0

以上三个步骤分别实现了:将访问80和443端口的包标记,并使用tun0接口发送出去;将标记为"1"的包使用tun0接口发送出去;将所有未被标记的包使用eth0接口发送出去。这样就实现了访问80和443端口的包使用tun0接口,访问其他端口的包使用eth0接口的效果。

介绍一种"新"的隧道技术: spiped

2 April 2023 at 16:47

在之前的文章SSH隧道:访问翻墙服务器的临时性手段 的时候介绍了一种使用 SSH 隧道进行端口映射,进而进行手动的流量混淆的技术。就稳定性来说这个方案是经受了考验的。在过去几年里,无论任何时候 SSH 隧道都是能够提供稳定可靠的链接的。不过,SSH 隧道的性能是一个问题。根据 Stackoverflow 上的 这个问题下的回答 来说:“当你通过TCP隧道传输TCP时,性能问题就会出现,因为您有两个层执行自适应纠正”。在这篇文章里面我介绍一个较新的方案。

1 简介

新的方案设计一个新的工具:spiped(github)。spiped是一种安全的、轻量级的加密通信工具,可用于在不安全的网络中传输敏感数据。它的设计目标是提供简单、易于配置和使用的加密通信,而不需要复杂的密钥管理或公钥基础设施。spiped使用对称密钥加密算法,可以在客户端和服务器之间建立加密通道。它可以用于保护各种类型的数据流,包括SSH、Telnet、HTTP和SMTP等协议。spiped的另一个优点是它可以在不同的平台上使用,包括Linux、FreeBSD、OpenBSD和Windows等操作系统。

2 使用方法

spiped 的使用非常简单。在 Ubuntu 上可以通过 apt 来安装。也可以自行编译。在完成安装以后,我们首先进入服务端,运行下面的命令生成一个秘钥:

1
dd if=/dev/urandom bs=32 count=1 of=keyfile

其中 keyfile 是生成的秘钥文件,注意将其保管到合适的位置。然后用下面的服务启动 spiped 服务端服务:

1
spiped -d -s '[0.0.0.0]:8025' -t '[127.0.0.1]:25' -k /path/to/keyfile

注意,不同于 ssh 使用同一个 TCP 链接来走所有的隧道流量,spiped 会为每个流创建一个独立的 TCP 链接。因此在做代理中介使用时,spiped 可能会需要创建数量较多的 TCP 链接。spiped-n 配置可以指定最大链接数量,这个数值默认是 100,对于代理应用来说这是不够的。你可以将其设置为 10000。

其中 -s 后的地址是服务端的监听地址,-t 的转发的目标地址,-d 表示将加密的流量从 -s 后的地址解密后发往 -t 后面的地址。这里我们可以填写 Shadowsocks 服务监听的地址。注意 Host 可以保持成 127.0.0.1 的形式。这样,我们可以在防火墙中把 Shadowssocks 的公网监听端口关闭,仅允许从加密隧道访问,这样可以提升安全性。

上面的命令在输入后会自动进入 Daemon 模式运行。

然后我们来到客户端(一般是跳板机),将服务端生成的秘钥文件下载到客户端,运行

1
spiped -e -s '[127.0.0.1]:25' -t $SERVERNAME:8025 -k /path/to/keyfile

其中 $SERVERNAME 是服务端的 IP 地址。注意用 [] 包裹的形式来填写。如果这里说的客户端也是 Shadowsocks 的机器,那么这里的源地址(-s 后的地址)可以写 127.0.0.1,但是如果是跳板机,那么应该写成 0.0.0.0

在上面的设置中,方括号内可以写入 IPv6 地址,但是注意 IPv6 的全网段监听地址就不能写 [0.0.0.0] 了,而是要写 [::]

客户端的程序也是会自动进入 Daemon 模式运行。

完成设置之后,访问客户端(跳板机)的 25 端口就相当于直接访问服务器的 25 端口。

3 后记

请注意,spiped:

  • 需要一个强密钥文件:通过-k选项指定的文件应该具有至少256位的熵。(dd if=/dev/urandom bs=32 count=1是你的好朋友。)
  • 需要来自/dev/urandom的强熵。(确保您的内核的随机数生成器在引导时被种子化!)
  • 不提供任何防止通过数据包计时泄露信息的保护:在spiped上运行telnet会保护密码不会被直接从网络中读取,但不会掩盖输入节奏。
  • 对于交互式会话,可以显着增加带宽使用:它以1024字节的数据包发送数据,并将较小的消息填充到此长度,因此如果不能与相邻字节合并,则1字节的写操作可能会扩展到1024字节。
  • 使用对称密钥——因此,任何可以连接到spiped“服务器”的人也可以冒充它。

如何使用 Proxifier 来进行流量代理控制

30 March 2023 at 22:33

Proxifier 是一款网络工具软件,可以帮助用户通过代理服务器进行网络访问,实现匿名化、翻墙、加速等功能。支持多种代理协议,规则管理,流量监控和日志记录等功能,提高网络连接的灵活性和智能化。注意 Proxifier 本身并不是一个代理软件,也不是一个 VPN 软件,其作用是控制其他其他软件访问代理的方式。

上一篇文章我提到了可以试用 Proxifier 来解决通过 Shadowsocks 代理访问呢 ChatGPT 频繁出现 Something Went Wrong 的问题,在本文中我们来展开讲一下具体的做法。

1 准备工作

1.1 软件下载

Proxifier 的官方网站是 https://www.proxifier.com/,其正版价格较贵,约 40 美元。不过,较早的 2.x 版本存在破解版。读者可以根据自己的经济状况来选择。

1.2 代理准备

如同开头提到,Proxifer 本身不是一个代理程序,读者应该自己提前准备好代理。这些代理中,无论是 Shadowsocks、V2Ray 还是其他常见的代理程序,都会在客户端本地重建一个 Socks5 代理,这一般都可以在代理客户端程序的配置或者服务器设置中看到。下图给出的是 Shadowsocks-NG 客户端在 macOS 中的系统配置,可以看到程序在本地 (localhost) 的 1086 端口创建了一个 Socks5 代理。

这个代理会被进一步转成 http 代理,从而被浏览器使用,这个转换过程是导致 ChatGPT 链接不稳定的元凶。接下来我们要使用 Proxifier 让 ChatGPT 直接使用 Socks5 代理。

2 设置 Proxifier

2.1 添加代理

我们以知乎上这篇文章为范本简要讲一下设置过程。首先我们需要将现有代理软件提供的 Socks5 服务告知 Proxifier,这通过添加代理服务器实现。

注意一般各种代理软件在本地创建的代理都是无需验证的,我们可以取消验证启用。输入设置之后,可以点击检查确认设置是否正确。

3 设置规则

为了让 ChatGPT 的访问能够通过 Proxifier 访问代理,我们需要配置 Proxifier 的代理规则。

添加代理规则的页面如下:

我们有两种方法引导 ChatGPT 的网络访问:

  1. 我们可以选择下载 ChatGPT Desktop 客户端,然后通过代理规则中应用程序过滤规则找到 ChatGPT 程序,然后让目标主机为空(这意味着所有的目标主机都会服从本规则);
  2. 将应用程序部分置空,然后在目标主机中填入 ChatGPT 访问的域名。经过我的试验发现,填入 chat.openai.com; challenges.cloudflare.com; *.openai.com; 即可。

事实上,因为 Proxifier 能够全局性地处理所有网络访问,因此,第二种方法对于使用 ChatGPT Desktop 的用户来说同样有效。下图是完整代理规则。

至此我们就完成了设置,你可能需要重启浏览器才能能让 Proxifier 成功地引导 ChatGPT 的流量。

使用 Shadowsocks 访问 ChatGPT 频繁出现 Something Went Wrong 问题的解决方法

28 March 2023 at 18:16

update at 2023.4.27:

Github 上有人做了一个开源的油猴脚本 KeepChatGPT 可以解决这个问题。在浏览器上这个脚本可以正常使用,但是注入到客户端时(尽管内部仍然是一个浏览器)会出现错误。

update at 2023.4.12:

在 Windows 上这套方法存在一定的问题。可能的原因是 Proxifier 的代理权限有时候会被 Shadowsocks 客户端,也就是 Privoxy 争抢。

由于国情原因我们使用使用 ChatGPT 需要使用各种形式的代理,这时我们肯能会发现在与 ChatGPT 对话的过程中可能会出现下面的错误:

Something went wrong. If this issue presists please contact us through our help center at help.openai.com

这种错误一般在我们再让网页空闲一段时间(通常是一分钟)后再次提问时出现。当然,去 OpenAI 的帮助中心是不会搜到什么有用的信息的。如果你去检索这个问题,你能得到的最好答案是在出现这个页面之后刷新页面,然后回到对话窗口继续对话即可。但是刷新后如果再次出现空闲窗口的情况,这个问题会反复出现,因此你在对话中就不得不反复地刷新页面,再加上每次页面重载你都需要去勾选 Cloudflare 的机器人验证框,这就会极大程度上拖慢我们的速度,影响产品体验。

这个问题是否可能是由于我翻墙访问导致的呢?我使用的翻墙软件是 Shadowsocks,经过一番搜索,一个 Github Issue 的讨论给了我灵感。

讨论地址:https://github.com/shadowsocks/shadowsocks-libev/issues/2149

尽管讨论的题目和 ChatGPT 没有直接关系,但是这个回复提到,Shadowsocks 在构建代理管道时,会在客户端使用 Privoxy 来讲 Socks5 代理转换成 http 代理,进而被浏览器使用。Privoxy 的配置中包含了 Socket 连接时长方面的控制。于是我查看了我本地的 Shadowsocks 使用的 Privoxy 的配置文件,这个文件在 MacOS 中位于 /Users/lena/Library/Application Support/ShadowsocksX-NG/privoxy.config 文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
toggle  1
enable-remote-toggle 1
enable-remote-http-toggle 1
enable-edit-actions 0
enforce-blocks 0
buffer-limit 4096
forwarded-connect-retries 0
accept-intercepted-requests 0
allow-cgi-request-crunching 0
split-large-forms 0
keep-alive-timeout 5
socket-timeout 60

forward 192.168.*.*/ .
forward 10.*.*.*/ .
forward 127.*.*.*/ .
forward [FE80::/64] .
forward [::1] .
forward [FD00::/8] .
forward-socks5 / 127.0.0.1:1086 .

# Put user privoxy config line in this file.
# Ref: https://www.privoxy.org/user-manual/index.html

可以看到 keep-alive-timeoutsocket-timeout 这两个选项设定的超时时间都比较低。我做了下面两个尝试:

  1. 将这两个设置调高,并重启 Shadowsocks,但随后发现 Privoxy 重置了设置文件;
  2. 我手动 kill 掉正在运行的 Privoxy 并且手动使用更新后的 config 文件调起一个新的进程,但是仍然没有解决 Something went wrong 的问题;

至此,我也不想和 Privoxy 纠缠下去,既然问题出在 Socks5 代理转 Http 代理的环节,我们可以使用 Proxifier 这个软件直接使用 Shadowsocks 提供的 Socks5 代理,就可以很好地解决这个问题。

Proxifier 的教程网上非常多,我就不在这篇文章里赘述了。

Proxifier 的使用参加我的文章:如何使用 Proxifier 来进行流量代理控制

三星手机的「捷径」,如今更好用:Bixby 日常程序 +

13 May 2021 at 03:21

若想进阶 Power User,一款趁手的自动化工具必不可少,在移动设备上,iOS 快捷指令和 Android 平台的 Tasker 是个中翘楚,少数派已有数不清的文章介绍。对三星用户来说,其实还有另一个选择:Bixby 日常程序。它最初亮相于 2019 年的 Galaxy S10 系列发布会上,经过两年的迭代,易用性和功能性都有长足进步,覆盖了大部分日常情景。

四月底,三星旗下的另一款系统级增强工具 Good Lock 迎来家族新成员 Routine +,为 Bixby 日常程序添加了多项新特性,玩法更丰富的同时,也让它在生产力方面迈出一大步。这结论缘何而来,是否略显夸张,读罢本文,你应该会有答案。

日常程序,是什么?

鉴于 Bixby 日常程序的默认入口较深,也鲜有文章介绍,切入新功能前,我们不妨先熟悉下本体。如果你还不知道这是什么,请前往「设置 → 高级功能」启用「Bixby 日常程序」选项。为了方便日后查找和使用,我建议同时将其图标添加至应用程序屏幕。下拉通知栏,编辑按钮,还可以将开关添加至快捷面板,随时启用或停用。

启用 Bixby 日常程序

打开 Bixby 日常程序,三星已经为我们准备了数款预设的自动化流程,如在家时更改声音模式和快捷方式,连接耳机时读出特定应用的通知,运动时播放音乐并启用定位服务……点击即可预览具体操作,快速编辑或保存。滑至主界面底部,我们还能通过清晨、驾驶、睡前等推荐的生活情景,按提示一步步创建最适合自己的日常程序,掌握它的基础用法。

建议的日常程序

与可编程能力更强的 Tasker 相比,我更愿意将 Bixby 日常程序称为本地版 IFTTT:图形化用户界面,没有高昂的学习成本,逻辑也是最直观的「如果满足触发条件则执行指定操作」。作为一款预置应用,Bixby 日常程序主要覆盖 Android 系统功能,操作的分类和图标与「设置」一致,支持 Samsung DeX 等独占特性,还能与三星自家设备联动,控制智能家居,开启无线耳机的主动式降噪等。

if trigger then action

最简单的日常程序,也可能为我们省下不少时间。拿基础的「打开特定应用程序」触发条件来说,观影时启用杜比全景声、阅读时进入护眼模式、办公时解除屏幕方向锁定等常用操作,都可以交给 Bixby 日常程序处理。如果你始终开启眼睛舒适度保护,也可以设置为打开设计工具时还原屏幕色彩;在启用自适应旋转的平板电脑上,改成打开部分未适配手机应用时保持纵向显示更合适。最关键的是找准手机使用过程中的痛点,因地制宜。

如果应用程序打开

将多种操作组合,较为复杂的工作流程也不在话下,如:

  • 充电时,自动延长锁屏时间,并开启息屏提醒,不影响续航的同时随时查看通知;
  • 打开游戏,智能调整屏幕分辨率和刷新率,顺便开启无线耳机的游戏模式,降低音频延迟;
  • 连接车载蓝牙,则打开导航应用,读出短信通知,拒接来电并回信;
  • 借助「到达或离开指定地点」触发条件,可以在地铁站切换至 NFC 卡片模式或显示支付宝乘车码,在家和公司采用两套完全不同的手机配置方案。

一次触发,多种操作

当然,触发条件也不局限于一个,给我们更多施展空间。检测到睡眠状态且处于夜间,则开启免打扰模式并降低屏幕亮度;若是还忘记充电,再采取其它措施节省电量,以防关键时刻手机掉线。这种情况下,当日常程序结束时,就不必撤销所做的改动了。上课时段,若在教学区连接至校园 Wi-Fi,调整手机为静音,启动专注模式;想对自己更狠一点,「如果工作日打开摸鱼 App,则关闭摸鱼 App」的日常程序或许会有奇效。

更进一步

Bixby 日常程序的最大软肋,是仅支持预设动作。坐拥自定义 Bixby 快捷命令、读取 NFC 标签、过滤信息关键词等潜力巨大的触发条件,却不支持变量传递;「进入网站」操作离跳转 URL Scheme 只差一步,却必须以 http:// 开头,扩展性远不足以满足进阶用户的需求。

入门以上而专业未满,让 Bixby 日常程序的定位略显尴尬。即将介绍的 Routine +,则在维持易用性的前提下,一定程度上弥补了这个缺陷,我们不妨在下文见识一番。

不止多个加号 SAGA

Good Lock 是三星官方推出的系统定制工具,由功能各异的模块组成。从诞生初期的系统界面美化,到逐步添加的诸多实用特性,现已成为集定制主题、导航手势、通知过滤、多任务处理于一身的全能选手,是所有三星用户都值得安装的利器。如果你未曾听说,不妨阅读少数派的这两篇文章:

近期上线的 Routine + 模块,顾名思义,是 Bixby 日常程序专精,目前支持基于 Android 11 的 One UI 3.1。具体来说,它提供三种新触发条件和三种新操作,配合原有功能,实现更强大且精准的自动化流程。

条件

安装 Routine + 后,再次打开 Bixby 日常程序,你会发现触发条件最底部多出了相应分类,可以覆写指纹、按钮和 S Pen 的硬件设置。如遇熊孩子抢手机,兰花指一伸,直接进入与主系统隔离的儿童空间;S Pen 顺时针画个圈,设备便开始播放音乐,顺便启动番茄计时。按钮操作不妨与其它条件结合,例如上文提到的乘车码,改成在地铁站双击侧面按钮时打开,既方便又不用担心误触发。

新触发条件

操作

Bixby 日常程序的操作中,同样新增了 Routine + 类别,分别为触摸宏、模拟方向键和读出文字。后两者的应用面似乎较窄,需要方向键辅助的触屏应用本就少见,文字转语音也算不上高频操作。我暂时能想到的,只有用 S Pen 隔空玩贪吃蛇比较方便,以及收到催稿信息时能知会一声 TACTICAL NUKE INCOMING 了。触摸宏的画风则大不相同,有必要另起几段详细说明。

新操作

触摸宏的作用,是记录我们的点击、滑动等操作的时间、位置和次序,保存后随时调用,有点类似 Windows 平台的按键精灵。创建触摸宏时,需要先抵达目标界面,然后点击浮动工具栏的录制按钮,执行希望模拟的流程,测试成功后,点击保存即可。为规避 App 响应速度等因素带来的影响,我建议留出一定的容错空间;如果途中不慎误操作,可以回溯历史,依次删除上一步。

创建触摸宏

不用说,Bixby 日常程序自然能与 Bixby 快捷命令配合使用,触摸宏的出现,得以了却我长久以来的夙愿:用 Bixby 控制米家设备。提前录制好动作,创建相应的日常程序,指定一则合适的口令,就可以指挥 Bixby 替我们跑腿了。当然,不设置快捷命令,直接对 Bixby 说「启动 XX 日常程序」就行,Android 11 的电源菜单也远比这高效,但生活还是需要一点仪式感的,不是么?

君子动口即动手

触摸宏的真正价值在于重复的机械化行为,打开应用时点击跳过广告、接近公司时钉钉打卡、快速擦亮闲鱼宝贝、商城抢购热门商品、手机游戏挂机等高频操作,都可以用它轻松搞定。另一方面,导航手势也在触控操作范围内,进入其它 App 不影响触摸宏的录制。因此,只要图标的相对位置不变,一键签到多款 App 的日常程序并无理论障碍。实际运用中,需要保证 App 不会更新改版,可行性不高。

触摸宏的应用之一

纵有诸多限制,我仍将触摸宏视为能引发质变的新功能,跳出有限的预设命令,模拟脚本也难以完成的繁琐操作,极大地拓宽了 Bixby 日常程序的应用边界。由于以「录制」而非「编写」的形式呈现,使用门槛维持在较低水平,缺乏编程知识的普通用户也能掌握。如果在后续更新中,能引入简单的变量传递和识别文字点击特性,Bixby 日常程序将真正踏入专业范畴。

最后,有必要在这里提醒各位读者,借助触摸宏自动化抢券、挂机等行为有几率被判定为使用作弊脚本,导致账户遭到限制甚至封禁,还请谨慎设置,不要滥用。

分享

可能是由于此前的操作都比较简单,Bixby 日常程序并不支持同步,在设备间迁移数据成了麻烦事。新操作之余,Routine + 也带来了日常程序的导入与导出功能,分为二维码和 JSON 两种形式,与朋友分享自己的得意之作或者备份到云端都很方便。不过,导出的日常程序会丢失自定义图标信息,触摸宏也无法完整保留,必须在新设备上重新录制,期待进一步完善。

扫一扫,没惊喜

结语

目前来说,如果你有足够的动手能力和编程知识,Tasker 无疑更加强大,指纹解锁和 S Pen 手势等硬件触发条件也能通过 Logcat Entry 功能实现,可以说是 Bixby 日常程序的上位替代。

但对大多数普通三星用户来说,系统自带的 Bixby 日常程序无需另行付费,上手简单,直观易懂,功能也足以满足日常所需,是自动化工具入门的不二之选。

Routine + 和触摸宏的出现,赋予了 Bixby 日常程序更多可能,让它有能力满足一部分生产力需求。同时,得益于友好的录制方式以及对三星自家特性的充分利用,Bixby 日常程序实现了相较于 Tasker 的差异化亮点。两年间的多次改版与更新,证明了三星对它的重视程度,期待 Bixby 日常程序能维持现有的低门槛,加入更多专业功能,成为 One UI 不可不知的「必备应用」。

白嫖Gemini_API搭建个人AI助理

By: wayen
8 March 2024 at 20:19

白嫖Gemini_API搭建个人AI助理

发表于|更新于|实用教程
|字数总计:443|阅读时长:1分钟|阅读量:

说明

本次搭建过程分为两步,第一步获取Gemini_API_Key,第二步搭建适用Key的程序,不考虑Key泄露第二步完全可以省略。
示例: https://chat.xml.wiki 访问码: xml.wiki(输入访问码即可直接试用)

Gemini_API_Key

ChatGPT-Next-Web

有许多程序可以使用Gemini_API_Key,在此只介绍ChatGPT-Next-Web的搭建。事实上你也可以直接使用别人搭建好的,在不输入访问码时将自己的Key填入设置即可。ChatGPT-Next-Web可以使用Vercel、Docker和CloudflarePages三种不同的方式搭建,见官方教程,本节复述CloudflarePages搭建教程。ChatGPT-Next-Web也提供了桌面版本,下载点击安装即可使用。

  • 打开https://dash.cloudflare.com,点击左侧Workers和Pages下的概述
  • 点击创建应用程序后点击Pages连接到Git
  • 链接你的Github账号,选择你Fork的项目后开始设置
  • 项目名称和分支一般默认即可,其他未提及项默认即可
  • 框架预设选择Next.js,构建命令填写npx @cloudflare/next-on-pages@1.5.0
  • 点开环境变量(高级),挨个复制以下内容
    1
    2
    3
    4
    5
    6
    7
    CODE = xml.wiki    #访问码,即登录使用的密码
    CUSTOM_MODELS = -all,+gemini-pro #选择使用的模型
    GOOGLE_API_KEY = ****************** #Gemini_API_Key
    NEXT_TELEMETRY_DISABLE = 1
    NODE_VERSION = 20.1
    PHP_VERSION = 7.4
    YARN_VERSION = 1.22.19
  • 点击保存并部署后立即取消部署
  • 来到你部署的这个项目的设置->函数->兼容性标志
  • 分别在配置生产兼容性标志配置预览兼容性标志两项中填写nodejs_compat
  • 点击部署选择重新部署即可,等待部署完成即可访问
文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

macOS完整安装包下载方法

22 July 2019 at 12:55

为什么从商店下载的macOS安装包不完整?

怎样才能下载到全量安装包/安装镜像?

自从macOS 10.12 Sierra之后,Mac的官方商店App Store不再为大家保留OS系统的「已购项目」了。也就是说如果你升级后想要降级或者制作U盘安装盘,而这个版本恰好不是该大版本的最后一个版本(比如10.13.6),那么只能通过一些收集镜像的网站下载了,这又存在着可能的安全问题。

因此我建议大家最好安装每个大版本的最后一个release,并且在前文也提供过App Store的下载链接:macOS系统下载。但是最近却发现通过官方商店下载的安装app不再是几个G大小了,而是换成了几十MB的下载安装器(installer)。比如我现在使用的系统是10.13.2,想要升级到10.13.6,需要用这个几十MB的安装器直接升级,颇有一种OTA的感觉。

但是这不是我们所希望的,因为有了完整的系统安装app我们可以制作U盘安装盘,可以制作DMG和ISO镜像。因此本篇文章想和大家探讨一下几种下载完整macOS安装包的方法。

*大版本:指macOS High Sierra、macOS Mojave等

交流群:Newlearnerの水群

《macOS完整安装包下载方法》

校验SHA1值

这是贯穿本文的重要一步,为了保证下载的完整安装包是原版,够清真,我们必须要校验SHA1值。

已经有人帮大家整理好SHA1表了,开源地址:apple-installer-checksums

重点是对于InstallESD.dmg(主安装包)和BaseSystem.dmg(recovery系统)的校验,大家可以在/Applications/Install*OS*.app/Contents/SharedSupport/路径下面找到它们。

校验方法

OSX:

shasum /Applications/InstallOS.app/Contents/SharedSupport/{Base,Install}*.dmg

Linux, etc:

openssl sha1 InstallESD.dmg

Windows 10 (PowerShell 3+):

Get-FileHash -Algorithm SHA1 InstallESD.dmg

官网下载

App Store下载地址:macOS系统下载

这是最清真的办法了,不过你们可能要问:上面不是说现在商店下载的安装包不完整吗?

没错,但是根据我的发现这样的installer只存在于同一个大版本的升级过程中(类似于增量下载)。也就是说,macOS High Sierra的用户想要升级到10.13.6可能会遇到下载一个20多M的installer,但是macOS Mojave商店下载的是完整的安装包,反之亦然。

所以解决思路是:跨大版本下载

首先你需要有跨版本的DMG或者ISO安装镜像一个,并通过pd安装好macOS系统,前文之述备矣这里就不啰嗦了。安装好之后在跨版本的macOS里面下载好之前或者之后的大版本安装包,并移植到物理机使用即可。

e.g. 我用macOS Mojave虚拟机通过商店下载好macOS High Sierra的安装包,并且是完整的

《macOS完整安装包下载方法》

这个办法可能有点强人所难,我只想要下载安装app用于升级或制作安装U盘,却要下载跨版本的镜像和虚拟机软件。

魔改Installer

只有一个20多M的installer也是有办法get到完整的安装包的。首先去商店下载该installer,然后点击安装运行,会看到下载进度条(如果不放心可以分一个宗卷,然后选择安装在该宗卷里):

《macOS完整安装包下载方法》

这个时候前往该宗卷,可以看到已经有了一个名为macOS Install Data的文件夹。耐心等待下载进度条走完,然后不要点击「重启以安装」,而是在左上角的菜单栏点击退出。

让我们来分析一下正常情况下一个安装包的contents结构:

macOS High Sierra.app
             └── Contents
                          ├── _CodeSignature
                          ├── Frameworks
                          ├── Info.plist
                          ├── MacOS
                          ├── version.plist

                          ├── PkgInfo
                          ├── PlugIns
                          ├── Resources
                          └── SharedSupport

                                        ├── AppleDiagnostics.dmg
                                        ├── BaseSystem.chunklist
                                        ├── BaseSystem.dmg
                                        ├── InstallESD.dmg
                                        ├── InstallInfo.plist
                                        └── AppleDiagnostics.chunklist

其中通过Info.plist可以看到安装包的版本号,而installer和安装包有着高度相似的目录结构,只是少了一个SharedSupport文件夹。因此我们可以通过增加installer的contents从而将installer转变为完整的安装包。

/Applications/InstallOS.app/Contents/里面创建一个名为SharedSupport的文件夹,并把刚刚下载好的macOS Install Data文件夹中的所有文件拷贝到新建文件夹,即制作完毕完整安装包。

此时我们可以按照前文所述,利用这个安装包制作U盘安装盘或者镜像。

Mac Downloader

制作方:macmeup.com

下载:传送门  密码:newlearner

支持下载 macOS High Sierra、macOS Mojave 和 macOS Catalina 部分原版安装 APP, 经过抓包都是从苹果官方服务器下载,放心食用

《macOS完整安装包下载方法》

  • 目前支持的系统版本:

– 10.13.6(17G2208)

– 10.13.6(17G65)

– 10.13.6(17G66)

– 10.14 Beta(18A384a)

– 10.14.4 Beta(18E194e)

– 10.14.4(18E2034)

– 10.14.5(18F2059)

– 10.14.6(18G103)

– 10.15(19A602)

– 10.15.1 Beta(19B77a)

个人猜测该软件是直接爬取苹果官方下载服务器链接的,所以只提供部分版本下载,今后可供下载的版本号也可能会变化。

macOS Patcher

官网地址dosdude1.com

用途:本来该Patcher是用来制作特殊的U盘安装盘或者安装镜像以支持旧款Mac,我们这里只用到下载安装包这一功能

下载

macOS Sierra Patcher

macOS High Sierra Patcher

macOS Mojave Patcher

macOS Catalina Patcher

使用

打开该Patcher,在菜单栏点击下载macOS High Sierra即可

下载完毕不要忘记校验SHA1值

《macOS完整安装包下载方法》

根据我的抓包记录,该Patcher和官方途径下载使用的链接并无二致,因此大家可以放心使用。

《macOS完整安装包下载方法》

《macOS完整安装包下载方法》

Python脚本下载

开源地址macadmin-scripts

下载installinstallmacos.py到Mac,然后用python运行,如图:

《macOS完整安装包下载方法》

该脚本的原理是爬取苹果官网下载链接并收集所有可供下载的os,目前可供下载的os如下:

#    ProductID    Version    Build   Post Date  Title
 1    091-95155    10.13.6    17G66  2019-01-08  macOS High Sierra
 2    091-94326    10.13.6    17G65  2018-07-11  macOS High Sierra
 3    041-69971    10.14.5  18F2058  2019-07-09  macOS Mojave
 4    041-47723    10.14.4  18E2034  2019-03-25  macOS Mojave
 5    041-64745    10.14.5   18F203  2019-05-22  macOS Mojave
 6    041-59913    10.14.5   18F132  2019-05-13  macOS Mojave
 7    091-95774    10.13.6  17G2208  2018-07-30  macOS High Sierra

Choose a product to download (1-7):

选择你要下载的镜像并回车即可。该脚本下载使用的链接经过抓包也是官网链接,放心使用。

下载完毕不要忘记校验SHA1值

后记

当然,大家也可以使用论坛或者各大苹果网站分享的完整安装包,这些大多是专门整理收集来的,不过一定要注意校验SHA1值。一些非最终版本的安装包只能通过这种途径下载(比如10.13.2)。因此也提醒大家安装完系统之后一定要备份安装app以备不时之需。

博主在思考下载完整安装包的方法时,也曾经想过使用mas-cli。不过局限于App Store命令行存在商店下架就无法下载等弊端并没有成功,如果大家有其他方法也欢迎交流。

至此,从完整安装包下载到制作DMG和ISO镜像再到安装虚拟机,从U盘安装盘制作到系统安装,本博客已经形成了完整的体系。

参考文章:

dosdude1.com

macadmin-scripts

apple-installer-checksums

一键脚本自动优选Cloudflare_IP解析到免费域名下

By: wayen
12 January 2024 at 01:40

一键脚本自动优选Cloudflare_IP解析到免费域名下

发表于|更新于|实用教程
|字数总计:830|阅读时长:4分钟|阅读量:

说明

之前有人免费提供解析Cloudflare_IP的域名,但很快就被DNS污染了,因此此教程适合自己使用不建议分享。实现的原理很简单,第一使用CloudflareSpeedTest程序进行测速,选出质量高的IP地址;第二使用免费ddns将域名解析到优选的IP;第三使用cron定时执行任务。脚本适用amd64、arm64、arm架构的Linux服务器,安卓手机Termux使用需要做一定的修改,请点击目录直接查看内容。

Dynv6

需要借助Dynv6来获取免费域名和ddns,hostname是注册的二级域名,token位于网站首页左上角Documentation-> APIs页面内,空格之后的不要。两项复制之后在脚本执行后按提示输入即可。

自定义

echo "0 0 * * * timeout 10m $path/bestip.sh > /dev/null 2>&1" | crontab -
双引号内的内容是定时执行命令,为每日0时。
$path/CloudflareST -f $path/ip.txt -tl 200 -sl 6 -dn 5 -dt 10 -o "bestip"
CloudflareST的使用可参考,以上为选择时延小于200ms的IP进行测试,每个测试10秒限制6mb/s以上,得到5个合格IP。
ipv6=$(grep -oE "\b([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}\b" $path/bestip | head -1)
如果对ipv6有需求,请将ip.txt改为ipv6.txt,并将脚本内的ipv4改为ipv6。

脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/bin/sh

check_() {
# 检查服务器架构
architecture=$(uname -m)
case $architecture in
x86_64)
platform="amd64"
;;
aarch64)
platform="arm64"
;;
arm*)
platform="armv7"
;;
*)
echo "脚本不支持 $architecture"
exit 1
;;
esac
}

first_() {
# 下载测速工具并定时每日0点执行
mkdir -p $path && cd $path
latest_release=$(curl -s https://api.github.com/repos/XIU2/CloudflareSpeedTest/releases/latest | grep "tag_name" | awk '{print $2}' | tr -d '",')
download_url="https://github.com/XIU2/CloudflareSpeedTest/releases/download/$latest_release/CloudflareST_linux_$platform.tar.gz"
curl -LO $download_url || exit 1
tar -xvf CloudflareST_linux_$platform.tar.gz && rm CloudflareST_linux_$platform.tar.gz && chmod +x CloudflareST
echo "0 0 * * * timeout 10m $path/bestip.sh > /dev/null 2>&1" | crontab -
read -p "请输入 hostname:" hostname
read -p "请输入 token:" token
}

start_() {
# 测速并更新IP
cat <<EOF > $path/bestip.sh
#!/bin/sh

$path/CloudflareST -f $path/ip.txt -tl 200 -sl 6 -dn 5 -dt 10 -o "bestip"
ipv4=\`grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" $path/bestip | head -1\`
curl -Ls "http://dynv6.com/api/update?hostname=$hostname&token=$token&ipv4=\$ipv4"
EOF
chmod +x $path/bestip.sh && timeout 10m $path/bestip.sh
}

path="/opt/CloudflareST"
check_
first_
start_
exit

Termux

手机使用不必设置定时,mkdir bestip && cd bestip后执行脚本即可。之后每次执行cd bestip && ./bestip.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/sh

first_() {
# 下载测速工具
latest_release=$(curl -s https://api.github.com/repos/XIU2/CloudflareSpeedTest/releases/latest | grep "tag_name" | awk '{print $2}' | tr -d '",')
download_url="https://github.com/XIU2/CloudflareSpeedTest/releases/download/$latest_release/CloudflareST_linux_arm64.tar.gz"
curl -LO $download_url || exit 1
tar -xvf CloudflareST_linux_arm64.tar.gz && rm CloudflareST_linux_arm64.tar.gz && chmod +x CloudflareST
read -p "请输入 hostname:" hostname
read -p "请输入 token:" token
}

start_() {
# 测速并更新IP
cat <<EOF > bestip.sh
#!/bin/sh

./CloudflareST -tl 200 -sl 6 -dn 5 -dt 10 -o "bestip"
ipv4=\`grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" bestip | head -1\`
curl -Ls "http://dynv6.com/api/update?hostname=$hostname&token=$token&ipv4=\$ipv4"
EOF
chmod +x bestip.sh && ./bestip.sh
}

first_
start_
exit
文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

从零开始建立自己的域名和企业邮箱

By: James Guo
10 April 2022 at 04:40

本文将带领你注册属于自己的域名,并获得以自己的域名结尾的专属邮箱。全程仅需不到 10 分钟[1]。你只需要一台可以上网的设备,支付方式(微信/PayPal/银行卡)和一个现有邮箱。通过本文提到的域名注册商注册的 .com 域名价格为 CN¥79.20/年,并且续费不涨价。该域名注册商免费提供企业邮箱服务,因此不需要额外付费。

[1]:由于全球 DNS 服务器同步需要时间,可能需要 24-72 小时后域名上的服务才能够使用。若注册 .cn 等中国域名还需要进行实名认证,需要额外的时间。其他国际域名(如 .com)则不需要实名认证。

注册域名

首先,你需要注册一个属于自己的域名。域名的注册门槛很低,基本在几分钟内就可以完成注册,并且包括 .com 在内的众多域名后缀均不需要进行实名登记。通常,大多数域名都是按年进行购买。

本文推荐的是 氧熙域名注册 (原 TlOxygen)。该注册商是本站站长亲自建立,是全球第 7 大的域名注册商 PDR Ltd. 的最高级代理之一,提供更多的支付方式和更低的价格。从这里购买域名可以帮助本站持续发展。并且本站域名注册提供了域名删除与退款服务、免费企业邮箱和域名锁等服务。

首先,前往 氧熙域名注册主页(也可以浏览器地址输入 yangxi.tech 前往),进行域名搜索。比如,如果想要注册 guozeyu.com,只需要在搜索框里输入这个域名并点击搜索。如果你不确定想要注册什么后缀,那么也可以不输入后缀,如 guozeyu。如果你更习惯英语界面,或者需要以美元计费的结算方式,请前往 International Version

在首页搜索想要注册的域名查看搜索结果

可以看到,咱们心仪的域名已经被注册了。但是页面下方可以看到更多的 “其他可注册的匹配域名”。

选择一个域名

我们这里选择 guozeyu.online。注意划线价为域名续费的价格,为了可以方便地给域名续费,建议选择续费价格较低的域名。比如 .com 域名续费只需 CN¥79.20/年(国际版为 US$12.59/年),而 .online 的续费价为 CN¥270.00。我对域名的价格一向非常透明,我承认这绝不是市面上最低的价格。下表列出了一些注册商 .com 域名的续费价格

注册商美元/年人民币/年
氧熙/TlOxygen13.7987.60
阿里云万网 [2]10.9979.00
DNSPod [2]-72.00
NameCheap14.58-
GoDaddy19.99-
Cloudflare Registrar [3]9.15
NameSilo10.95
Google12.00

[2]:阿里云万网/DNSPod 注册 .com 域名需要实名认证,可能需要几天后域名才能够正常使用
[3]:Cloudflare Registrar 上注册的域名不支持修改 DNS 解析商、NS 记录,以及粘附记录(Glue Record)

完整的价格列表:中国大陆(人民币)International Version (USD)

注意,本文后续的内容仅适用于在氧熙注册的域名。在其他注册商注册的域名配置有所不同。此外,并不是所有注册商都免费提供 DNS、企业邮箱和域名转发服务。

然后进行结账。结账时建议选择免费的 “隐私保护” 功能,这样你的注册信息(包括邮箱、手机号、地址)就不会公开:

开启 “隐私保护” 功能,并选择 “创建账户”

然后填写注册信息。请确保注册信息是有效的(可以通过电子邮件联系到你),否则域名注册可能会失败。注册完成后即可选择支付方式了。目前支持的支付方式有微信支付、银行卡、PayPal

使用英文填写注册信息选择支付方式,这里以微信支付为例

付款完毕后,会自动跳转到支付成功页,点击 “继续管理订单” 进入后台管理页面。

支付成功

此时,你就可以看到你新注册的域名了。

点击你刚刚注册的域名

配置 DNS

点击你刚刚注册的域名,然后前往 DNS 管理菜单,点击 “管理DNS” 以激活 DNS:

点击 “管理DNS” 以激活 DNS

如果你看到 “您即将提交的信息不安全” 提示,请选择 “仍然发送”。随后看到如下页面即说明已经激活了:

DNS 管理界面

配置企业邮箱

此时我们已经拥有了域名,但该域名下还没有任何服务。我们首先配置企业邮箱,实现任何发往 @guozeyu.online 的邮件都转发到自己的邮箱里。这样有很多好处,比如你可以在注册微博的时候使用 weibo@guozeyu.online,在注册 GitHub 时使用 github@guozeyu.online,这样可以区分不同服务商发来的邮件;也可知道是谁卖了自己的邮箱信息,给自己发送垃圾邮件。

前往电子邮件菜单,点击 “管理电子邮件” 以激活企业邮箱:

点击 “管理电子邮件” 以激活企业邮箱

如果看到 “待验证域所有权 (Pending Domain Ownership Verification)”,则说明 DNS 尚未完成激活,请在 24-72 小时后尝试。新注册的域名默认使用我们提供的 DNS 服务器,邮件记录已经自动配置好了,所以无需手动添加记录。同时,你也可以点击 “设置 (Settings)”,选择 “修改语言偏好 (Modify Language Preference)” 然后选择 “Chinese (Simplified)” 以切换语言到简体中文。此外,如果你知道自己在做什么,也可以将域名换到其他 DNS 服务商,手动配置 DNS 记录。

待 24-72 小时,完成域名所有权验证后,你将看到如下页面,这时我们选择 “添加只转发帐户”:

选择 “添加只转发帐户”

这里我们用户名输入字母 i,“转发至” 输入自己的邮箱。这里只是拿我的邮箱演示。

填写必要转发信息

添加成功后,发往 i@guozeyu.online 的邮件就会转发到你刚刚配置的 “转发至” 邮箱了。但发往其他用户名的邮件依然会被拒收。此时我们需要配置 Catch-All:

点击 “邮件” 菜单中的 “管理 Catch-All”

然后选择 “转发到以下用户/账户”,并输入刚刚设置的用户名 i,然后点击 “应用” 即可。

配置 Catch-All

配置域名转发

目前,浏览器里的网站是无法访问的,因为我们还没有配置用于 Web 的服务器,也没有建立自己的网站。但我们可以配置域名转发,将访问到域名的的流量跳转到其他 URL。比如,你可以设置跳转到自己的微博、GitHub 等网站。具体操作如下:

前往域名转发菜单,点击 “管理域名转发” 以激活域名转发:

点击 “管理域名转发” 以激活域名转发

此时,你可以配置要转发的域名和要转发到的地址:

这里以跳转到我的 GitHub 页面为例

同时,也可以选择高级设置。我建议关闭 “URL掩蔽 / 重定向 / URL隐藏”。

建议关闭 “URL掩蔽 / 重定向 / URL隐藏”

同样,该配置需要 24-72 小时后才能生效。

总结

本文介绍了如何注册属于自己的域名,建立以自己域名结尾的的企业邮箱,以及配置域名转发。后续的文章将会更新如何建立属于自己的个人网站。可以点击页面顶部的关于按钮订阅本网站,这样就不会错过后续的内容啦~

如何解决VPS送中问题

By: wayen
11 August 2023 at 11:52

如何解决VPS送中问题

发表于|更新于|实用教程
|字数总计:648|阅读时长:1分钟|阅读量:

说明

当你使用脚本检测流媒体解锁时,可能会发现Youtube premium被标记为CN,恭喜你不用买会员也可以享受到无广告的Youtube了。为什么会这样呢?猜测的原因有:使用代理时开启了定位或开启了Google账号位置记录;你的VPS邻居开启了定位导致IP段被标记。以下将说明其他特征与解决方案。

特征

  • Gmail与Youtube会在首页隐藏图标,你可以输入网址访问。
  • 默认开启安全搜索,不显示敏感内容,你可以在设置中关闭安全搜索。
  • 搜索页面下方会显示Google标记你的位置信息,你可以使用虚拟定位更新这一位置。
  • https://google.com会自动跳转到google.com.hk,你可以使用https://google.com/ncr
  • https://www.youtube.com/red显示当前地区不支持会员,你无法购买Youtube会员。

解决方案

解决方案分两种,一种是向Google报告IP问题,但我在报告IPv6时总是提醒我IP地址无效;另一种是模拟定位,让你的位置信息被Goole重新读取。两种方法的快慢因人而定,可能几个小时也可能一天,或许也都需要接近一个月的时间。

报告IP

点击输入IP地址和国家,持续向Google报告即可。

虚拟定位

虚拟定位的方法也有两种,操作得当会立即改变搜索页面下方的位置信息,而这也是最关键的一步。手机只需要下载虚拟定位软件即可,以下详细介绍电脑浏览器更改位置信息的方法。
首先打开地图,搜索城市查找要定位的位置坐标。然后打开Chrome浏览器访问Google首页搜索我的位置,先不要给网站位置权限,鼠标右键打开开发者工具->检查依次点击标红位置。
20
点击管理之后添加位置,输入位置名称、经纬度及其他信息添加即可。然后再次来到管理点击左侧方框选择刚刚创建的位置名称。紧接着刷新网页,允许网站获得定位权限,点击搜索结果第一行的使用确切位置的定位按钮。现在你的位置就是你输入的坐标,来到网页最下方会看到*** - 根据您的活动记录 - 更新位置信息,点击更新位置信息即可。最后要做的就是等待。

文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

软路由如何只代理网桥Docker

By: wayen
5 August 2023 at 21:22

软路由如何只代理网桥Docker

发表于|更新于|实用教程
|字数总计:574|阅读时长:1分钟|阅读量:

说明

你购买并设置了软路由用于代理,让局域网内的其他设备也可以使用。现在所有的流量都将先经过代理程序,这不可避免地会带来损耗,尤其是使用BT时大量的流量会被规则判定以后再直连,甚至也会影响游戏的NAT类型。而且也不得不考虑一个问题:软路由本身总是需要代理吗?为了解决这个问题,我将介绍一下DAE这个代理程序的优点和配置过程。
DAE有什么优点,它的代理性能比其他的好一点点但不多,主要看中的是它的直连性能。由于直连流量并不经过代理程序,会像直连一样直连。而且它可以识别网卡流量,将其LAN接口绑定Docker0网卡可以代理Docker流量,同时将其WAN接口与ETH0解绑就可以让软路由不走代理只代理Docker。

配置

下载安装

DAE的下载安装极其简单,而且有集成了DAE的面板daed便于操控,所以我们只需要安装daed即可。安装过程可以参考Onecloud作为旁路由实现代理,注意:如果你的系统不是armbian,请跳过升级内核,重新选择下载,如x86平台daed-linux-x86_64_v3_avx2.zip

配置说明

在配置Global中找到接口及内核选项,LAN接口绑定使用代理的网卡,如果你是旁路由,绑定与WAN接口相同的网卡即可。此时如果只绑定LAN接口而留空WAN接口,那么软路由内所有流量直连,局域网内流量可以被代理。当绑定Docker0时所有的容器都可以使用代理,如果你只想让其中几个容器被代理,那么稍稍有些复杂。
创建一个网桥用于代理容器连接,此时主机网卡多出br-**,在LAN接口绑定即可代理容器流量。不需要代理的容器不必加入该网卡,流量经过Docker0。

1
2
3
docker network create 要创建的网卡名称
#务必在容器创建时添加--network参数,否则流量默认走Docker0
docker run -d --name=proxy --network=要创建的网卡名称
文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

如何在Alpine上安装Cloudflare_tunnel

By: wayen
3 August 2023 at 22:29

如何在Alpine上安装Cloudflare_tunnel

发表于|更新于|实用教程
|字数总计:255|阅读时长:1分钟|阅读量:

说明

Tunnel支持Windows/Mac/Debian/RedHat/Docker,你可以在Alpine上使用Docker安装,但Alpine并不见得总是适合Docker。当机器内存过小,或一些其他原因不能使用Docker时,你可以手动安装Tunnel。

安装过程

首先你要下载Tunnel的运行程序,然后让它保持后台运行,这在其他系统中通常只是一行命令。其他相同操作请参照Cloudflare_tunnel内网穿透

下载运行程序

点击下载cloudflared-linux-amd64,如果你的服务器架构不同,请自行选择,但不要下载安装包。

1
2
3
chmod +x cloudflared-linux-amd64
mv ./cloudflared-linux-amd64 cloudflared
mv ./cloudflared /usr/bin/

添加后台运行

通常会在Tunnel选择系统页面看到一长串的字母,比如cloudflared.exe service install eyJhI***,将${token}替换为eyJhI***即可。

1
2
3
4
5
6
7
8
9
10
11
12
echo '#!/sbin/openrc-run

command="/usr/bin/cloudflared"
command_args="tunnel --no-autoupdate run --token ${token}"
command_background="yes"
pidfile="/run/cloudflared.pid"

depend() {
need net
}' >> /etc/init.d/cloudflared
rc-service cloudflared start
rc-update add cloudflared default
文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

一键脚本合集

By: wayen
3 August 2023 at 20:27

一键脚本合集

发表于|更新于|实用教程
|字数总计:376|阅读时长:1分钟|阅读量:

说明

脚本会按照功能进行分类,暂时分为重装,测评和安装工具三大类,更多详细内容请点击当前标题。如果大家有任何脚本想要分享,可以在下方评论区留言。

重装

本节脚本主要涉及DD系统,包含KVM和Openvz/LXC的重装。

leitbogioro

1
wget --no-check-certificate -qO InstallNET.sh 'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh' && chmod a+x InstallNET.sh

Debian12/raid0/Ubuntu22.04/AlmaLinux/RockyLinux/CentOS9/Fedora38/AlpineLinux/KaliLinux/Windows一键重装,而且长期更新。作者称它史上最强,当然还需要MJJ们检验一番,可以去Nodeseek反馈BUG

MoeClub

1
bash <(wget --no-check-certificate -qO- 'https://raw.githubusercontent.com/MoeClub/Note/master/InstallNET.sh') -d 12 -v 64 -p 密码 -port 端口 -a

自动安装,参数自己调整,默认密码MoeClub.org

OsMutation

1
curl -so OsMutation.sh https://raw.githubusercontent.com/LloydAsp/OsMutation/main/OsMutation.sh && chmod u+x OsMutation.sh && ./OsMutation.sh

脚本仅支持OpenVZ7/LXC,可以在Debian/CentOS/Alpine系统之间自由转换。同时也推出了轻量版本,支持小于1G的硬盘重装,请自行查看。

测评

本节脚本主要涉及对主机的评测,包含跑分测试、流媒体检测和三网测速。

YABS

1
curl -sL yabs.sh | bash -s -- -5

测评内容主要包括系统基本信息、硬盘读写速度、iperf3速度测试、Geekbench5跑分测试。

RegionRestrictionCheck

1
bash <(curl -L -s check.unlock.media)

流媒体检测脚本,项目全面而且支持Docker运行。

今天就到这里了

文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

如何使用+86注册台湾Paypal

By: wayen
2 August 2023 at 12:10

如何使用+86注册台湾Paypal

发表于|更新于|实用教程
|字数总计:235|阅读时长:1分钟|阅读量:

说明

如果你身处境内又想要一个台湾Paypal,直接注册的话会要求你输入+886手机号。最简单的办法就是去买一个,但如果只有+86的话也不是没有解决的办法。本教程将介绍如何使用+86注册台湾Paypal,建议使用台湾IP避免风控(头铁也不是不行)。

注册Paypal

1.前往任天堂注册账号,国家/地区请选择日本
15
2.进入游戏商店
16
3.填写注册信息,台湾地址
17
18
19

重要提醒

虽然注册账号成功了,但也很容易风控,养号就全靠个人领悟了。如果要求上传身份证明和交易账单,你上传个身份证上去也大概率寄。支付时请设置银行卡汇率,否则就会使用Paypal汇率,比当前汇率要高。
给打游戏的留条活路,不要滥用!

文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

Nat_vps使用技巧合集

By: wayen
1 August 2023 at 20:23

Nat_vps使用技巧合集

发表于|更新于|实用教程
|字数总计:465|阅读时长:1分钟|阅读量:

说明

Nat_vps是共享一个公网IP地址的虚拟化主机。一般的机器也就共享ipv4,获得一定数量的高位端口,要么生而被墙要么生而要墙,但是奈何价格便宜。一些机器也会同时附带ipv6地址,相比单ipv6机器性价比更高,直接使用ipv6即可。本教程将介绍如何使用其ipv4,主要分为建站和代理两个部分。

建站

反向代理

IP未墙使用反向代理软件直接监听开放的高位端口即可,以Caddy2为例:(其他请参照Websocket协议的反向代理配置,更改监听端口即可)

1
2
3
4
5
6
7
8
9
10
11
xml.wiki:34567 {
tls /root/cert/pem /root/cert/key
encode zstd gzip #压缩
root * ./ #域名映射根路径
file_server #启动文件服务
}

xml.wiki:34567 {
tls /root/cert/pem /root/cert/key
reverse_proxy localhost:7890
}

Origin Rules

Cloudflare官方支持的非标准端口有HTTP80、8080、8880、2052、2082、2086、2095 HTTPS443、2053、2083、2087、2096、8443。然而Nat_vps的高位端口一般是10000以上,所幸我们可以使用Cloudflare Origin Rules来接入任意非标准端口。
注意:需要提前把用到的域名解析到主机上,并开启小云朵,否则无效。
14

Cloudflare Tunnel

请参照Cloudflare_tunnel内网穿透

代理

建站的端口也可以使用代理,本节讲解使用ws+tls协议,默认使用X-ui等服务端开启ws但关闭了tls,手机电脑等客户端设置端口为443并开启了tls

Origin Rules

首先在X-ui设置代理协议的监听端口,如443,然后按照建站的使用方式设置Origin Rules,最后使用端口转发或反向代理将34567的流量指向443即可。

Cloudflare Tunnel

首先在X-ui设置代理协议的监听端口,如443,然后按照建站的使用方式设置Cloudflare Tunnel即可。

文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

如何让Linux程序后台运行

By: wayen
29 July 2023 at 05:18

如何让Linux程序后台运行

发表于|更新于|实用教程
|字数总计:416|阅读时长:1分钟|阅读量:

说明

当我们需要让Linux程序后台运行时,可以使用以下四种方式:添加&符号、nohup、screen以及systemctl。其中systemctl还可以配置开机自启动。

&

1
2
3
./test &    #在可执行程序后空一格添加&
ps -ef|grep test #查看是否在后台运行,可查看PID
killall test #关闭后台运行或kill -9 PID

nohup

1
2
3
4
5
which nohup    #查询是否安装nohup,输出/usr/bin/nohup则已安装
apt install coreutils #安装nohup
nohup ./test & #会输出nohup.out文件
nohup ./test > /dev/null 2>&1 & #关闭输出
kill -9 PID #关闭后台运行

screen

1
2
3
4
5
6
apt install screen    #安装screen
screen -S test #创建一个名为test的窗口并进入
Ctrl a+d #退出窗口但不关闭,使用exit退出且关闭窗口
screen -ls #列出所有窗口
screen -x test #连接到已创建的窗口
screen -X -S test quit #关闭窗口

systemctl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
nano /lib/systemd/system/test.service    #输入以下内容
[Unit]
Description=Test Service
After=network.target

[Service]
ExecStart=/path/to/test.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target
systemctl daemon-reload #刷新服务
systemctl enable test #开机自启
systemctl disable test #关闭开机自启
systemctl start test #启动
systemctl stop test #关闭
systemctl restart test #重启
systemctl status test #查看状态

alpine

alpine没有systemd管理服务,因此需要安装openrc。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
apk add openrc
nano /etc/init.d/test #输入以下内容
#!/sbin/openrc-run

command="/path/to/test"
command_args="命令参数"
command_background="yes"
pidfile="/run/test.pid"

depend() {
need net
}
chmod +x /etc/init.d/test #赋予可执行权限
rc-service test start #启动
rc-service test stop #关闭
rc-service test restart #重启
rc-service test status #查看状态
rc-update add test #开机自启
rc-update del test #关闭开机自启
rc-update show #查看所有开机自启
文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

Sshwifty: Web SSH & Telnet Client

By: wayen
28 July 2023 at 03:23

Sshwifty: Web SSH & Telnet Client

发表于|更新于|实用教程
|字数总计:748|阅读时长:3分钟|阅读量:

说明

Sshwifty是一个用于SSH的网页客户端,并集成了Telnet功能。相比于ttyd,Sshwifty提供了密匙认证,在能够访问自身服务器的基础上又可以连接其他服务器,十分的便利。

安装

下载安装

点击本小节标题选择适合自己架构的安装包,如sshwifty_0.2.35-beta-release_linux_amd64.tar.gz。注意:Sshwifty登录需要配置SSL证书,否则会报错无法登录,建议使用Caddy反向代理。

1
2
3
4
tar -xvf sshwifty_0.2.35-beta-release_linux_amd64.tar.gz
mv sshwifty.conf.example.json sshwifty.conf.json
chmod +x sshwifty_linux_amd64
./sshwifty_linux_amd64

Docker安装

1
2
3
4
5
6
7
8
9
10
docker run --detach \
--restart always \
--publish 8182:8182 \
--env SSHWIFTY_DOCKER_TLSCERT="$(cat domain.crt)" \
--env SSHWIFTY_DOCKER_TLSCERTKEY="$(cat domain.key)" \
--name sshwifty \
niruix/sshwifty:latest
#若使用反向代理需删去--env,也可自行配置证书或使用自签证书:
openssl req \
-newkey rsa:4096 -nodes -keyout domain.key -x509 -days 90 -out domain.crt

配置详解

sshwifty.conf.json需要与sshwifty_linux_amd64同目录,或放置在/etc//root/.config/之一即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
{
"HostName": "", #默认为空允许所有域名,可指定域名
"SharedKey": "WEB_ACCESS_PASSWORD", #网页登录密码,为空则允许所有人访问
"DialTimeout": 5, #超时时间(秒)
"Socks5": "", #使用Socks5代理
"Socks5User": "", #Socks5用户名
"Socks5Password": "", #Socks5密码
"Servers": [ #可设置多个,在不同端口提供服务
{
"ListenInterface": "0.0.0.0", #监听本地网络接口
"ListenPort": 8182, #监听端口
"InitialTimeout": 3, #HTTP握手超时(秒)
"ReadTimeout": 60, #无操作时后端服务器与客户端保持连接时间(秒)
"WriteTimeout": 60, #服务器等待客户端连接准备接收新数据时间(秒),超时连接关闭
"HeartbeatTimeout": 20, #内部回显请求间隔(秒)
"ReadDelay": 10, #每个请求之间强制延迟(毫秒)
"WriteDelay": 10, #每次写入之间强制延迟(毫秒)
"TLSCertificateFile": "", #SSL证书路径
"TLSCertificateKeyFile": "" #SSL证书密匙路径
}
],
"Presets": [ #预先设置内容,以免手动再填写
{
"Title": "SDF.org Unix Shell", #名称
"Type": "SSH", #连接类型SSH或Telnet
"Host": "xml.wiki:22", #连接地址和端口
"Meta": {
"Encoding": "utf-8", #编码
"Authentication": "Password" #认证方式,密码或密匙认证
}
},
{
"Title": "My own super secure server",
"Type": "SSH",
"Host": "localhost",
"Meta": {
"User": "root",
"Encoding": "utf-8",
"Private Key": "-----BEGIN RSA Will be sent to client-END RSA PRI...\n", #私匙内容
#"Private Key": "file:///root/.ssh/private_key", #也可指定私匙文件
"Authentication": "Private Key", #认证方式,密匙认证
"Fingerprint": "SHA256:bgO...." #公匙指纹数据,默认
}
},
{
"Title": "My own super expensive router",
"Type": "Telnet",
"Host": "10.0.0.1",
"Meta": {
"Encoding": "ibm866"
}
}
],
"OnlyAllowPresetRemotes": false #只允许连接预先设置的远程主机
}
文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

Cloudflare: Quota limit exceeded

By: wayen
26 July 2023 at 14:23

Cloudflare: Quota limit exceeded

发表于|更新于|实用教程
|字数总计:76|阅读时长:1分钟|阅读量:

说明

刚刚在用域名给Tunnel授权时提示Quota limit exceeded. You can create no more than 50 tokens (Code: 1001),换了个域名仍然不成功。这是因为Cloudflare的API令牌数量超过了数量50的限制,删除掉不使用的就好了。

解决方法

https://dash.cloudflare.com/profile/api-tokens

文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

通过Cloudflare_tunnel实现远程SSH

By: wayen
24 July 2023 at 15:31

通过Cloudflare_tunnel实现远程SSH

发表于|更新于|实用教程
|字数总计:281|阅读时长:1分钟|阅读量:

说明

搭建Cloudflare_tunnel完成后似乎可以内网穿透了,但如果还要使用远程SSH仍需要几个步骤,本教程将介绍通过Cloudflare_tunnel实现远程SSH三种方法。

搭建Tunnel

给自己的SSH控制端也搭建Tunnel,可以使用代理命令<file path>/cloudflared access ssh --hostname ssh.xml.wiki通过SSH工具连接。

添加认证程序

首先打开工作台,点击左侧Access下的Applications创建应用。类型选择Self-hosted
09
然后本页按照下图填写内容,其他保持默认即可。
10
在添加规则页面,Policy name随便填写,具体的规则可按照下图填写,其他保持默认即可。
11
最后一页请如下图选择SSH,其他保持默认即可。
12
别忘记在Tunnel中的Public Hostname创建SSH规则,之后访问网站进行邮箱验证码登录即可。
08

SSH over WEB

简单来讲就是使用工具将SSH转为Web,再由Tunnel进行内网穿透。

ttyd

下载ttyd,默认监听7681端口,可通过参数-p指定。

1
2
chmod +x ttyd
./ttyd login

sshwifty

另见。使用Tunnel可不用配置SSL证书。

文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

Cloudflare_tunnel内网穿透

By: wayen
23 July 2023 at 20:06

Cloudflare_tunnel内网穿透

发表于|更新于|实用教程
|字数总计:340|阅读时长:1分钟|阅读量:

说明

借助Cloudflare_tunnel可以实现访问没有公网的主机服务,也可以安全保护自己代理公网端口,甚至在没有标准端口的Nat_vps上白嫖CDN。不需要花费一分钱的内网穿透,只需你添加一张信用卡即可。

教程

首先进入工作台,任意填写你的团队名称,选择Free Plan添加付款方式即可。
然后点击左侧Access下的Tunnels,创建一个Tunnel。
04
05
接着你可以选择自己的操作系统,以Onecloud为例选择Debianarm32bit,到页面下方复制左侧的命令到SSH窗口回车即可。下一步输入自己的Tunnel名称,点击保存。
06
之后填写自己想要穿透的内网端口。Subdomain是二级域名前缀,不要填解析过的;Path是网页路径,没有需求留空;Type选择http,URL是localhost+端口号。
07
最后在SSH窗口输入cloudflared tunnel login会输出一个网址,复制到浏览器打开,选择使用的域名授权即可。

远程SSH

服务中选择Type时请不要选择SSH,直接使用是无效的,你必须在SSH控制端同样安装Tunnel,或者在工作台新建一个SSH应用登录认证后使用。当然,最简单的办法就是把SSH通过Web分享出来再由Tunnel代理。
教程

文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

Websocket协议的反向代理配置

By: wayen
22 July 2023 at 11:20

Websocket协议的反向代理配置

发表于|更新于|实用教程
|字数总计:321|阅读时长:1分钟|阅读量:

说明

Websocket(简称ws)是一种双向通信协议,使用与HTTP协议相同的端口,并通过HTTP_Upgrade机制来进行握手建立连接。而使用HTTP协议的反向代理可能对Websocket不起作用,所以本教程主要介绍基于Caddy2、Nginx、Apache2的Websocket反向代理配置。

Caddy2

1
2
3
4
5
6
xml.wiki {
tls /root/cert/pem /root/cert/key #或由Caddy自动申请
reverse_proxy localhost:7890 #所有代理请求
reverse_proxy /xml/* localhost:7890 #/xml开头的请求代理
reverse_proxy /xml{http.request.uri.path} localhost:7890{http.request.uri.path} #保留原始请求路径的路由
}

Nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 443 ssl;
server_name xml.wiki;
ssl_certificate /root/cert/pem;
ssl_certificate_key /root/cert/key;
ssl_session_timeout 5m;

location / {
proxy_redirect off;
proxy_pass http://127.0.0.1:7890;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

Apache2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
sudo a2enmod ssl rewrite proxy proxy_http proxy_wstunnel
nano /etc/apache2/sites-available/000-default.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName xml.wiki
SSLEngine on
SSLCertificateFile /root/cert/pem
SSLCertificateKeyFile /root/cert/key
ProxyRequests off
ProxyPreserveHost on
RewriteEngine on
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
#反向代理http请求
ProxyPass / http://localhost:7890/
ProxyPassReverse / http://localhost:7890/
#反向代理websocket连接
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
RewriteRule .* ws://localhost:7890%{REQUEST_URI} [P]
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
</IfModule>

systemctl reload apache2
文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

❌
❌