包含关键字 linux 的文章

反复检查,代码无任何问题。
直接使用python解释器也能正常启动,但是在vsc里用code runner插件运行就报错。

PS E:\PythonDevelopFiles\GUI-n2n> python -u "e:\PythonDevelopFiles\GUI-n2n\app.py"
Traceback (most recent call last):
  File "e:\PythonDevelopFiles\GUI-n2n\app.py", line 3, in <module>
    from tkinter import *
  File "C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\lib\python3.9\tkinter\__init__.py", line 37, in <module>
    import _tkinter # If this fails your Python may not be configured for Tk

Windows的Python安装包默认是会安装tkinter的,接着我发现我居然有两个可选解释器

2023-01-27T19:39:36.png
第二个貌似是不久前为了编译n2n安装choco包管理器后使用choco安装的,打开控制面板\程序\程序和功能,发现确实还有个
Python Launcher 3.9.7686.0,大概是两个注册环境产生冲突了。所以手动运行了其中一个的安装工具进行配置选择修复,果不其然发现tk/tcl是扫描到的修复项目。
接着发现问题没有解决,并且在windows目录下手动找到了一些乱七八糟的pyhton文件残留。
索性重新安装python3.8 (为了兼容Windows7)
接着问题依旧,连从外部运行也出现报错:文件名、目录名或卷标语法不正确。

我人麻了,Windows真的不适合开发。。。。配置开发环境可用性还要用户手动去保证,商店下的py3.8还这个德行。我不想在微软阿三的粪坑上浪费时间了,直接重启到Debian11
sudo apt install python3-tk #Debian11已经预装Python3了,但是没有预装tk。

Linux下Python的tkinter库是单独打包的。(因为非开发者通常不需要下载tk即可运行常见的的各类应用,即使某些有需要,其打包时也会写明对python3-tk的依赖。

VSC启动.....

[Running] python -u "/tmp/tempCodeRunnerFile.python"
/bin/sh: 1: python: not found

[Done] exited with code=127 in 0.008 seconds

好吧,Code Runner 默认用的是python这个命令调用的,手动建立个软链接就好了。
或者...sudo apt install python-is-python3 #我更喜欢使用包管理器,而不是让自己手动制造哪些我可能在未来忘记或产生疑问的非常规因素。
VScode 启动,右键 Run Code
窗口出现,继续开发。

尾声:祝愿不可靠的MS Windows早点从中国广大用户的PC里滚蛋,哪怕使用不被看好的国产Linux发行版也比这种屎山生态的不可控专有软件更有利于国家发展。

PS:今天早上把应用商店的Python3.8卸载掉,果断choco install python3安装了最新版,功能一切正常,问题解决。

书接上回:计划:基于IPv6实现IPv4应用层组网我意识到n2n可以满足我的实际需求,并且它是完全自由和免费的!

什么是n2n?

Github ntop/n2n :Peer-to-peer VPN

n2n is a light VPN software which makes it easy to create virtual networks bypassing intermediate firewalls.
简单来说n2n是一个C语言编写的轻量级VPN软件,可以轻松的创建一个通过防火墙的虚拟网络。正如项目简介所言,n2n主要依赖点对点完成通信,对于无法穿透的NAT环境将自动使用超级节点进行failback。

搭建n2n 超级节点

首先需要安装n2n,过于简单,请参见项目仓库。(不要使用apt安装,一定要选择github的最新稳定版代码自行编译或使用编译好的release。

官方文档描述已经足够详尽,你只需要注意开放选定的tcp+udp端口,我选择了8080.
此外,还需要开放udp端口,53/5645 (或者,如果你的服务器没什么有价值的udp服务的话,干脆在防火墙把udp全放行了。)
我的节点:xfox.fun:8080
4Mbps小水管,你就别指望我这节点能拿来转发你的流量了,最多帮你打通p2p,转发还不如你自己开个或者用免费的frp/NPS服务器。

运行普通节点

过于简单,不过多描述
basic usage:  edge <config file> (see edge.conf)

        or   edge  -c <community name> 
                   -l <supernode host>:<port> 
                  [-a <tap IP address>] 
                  [-d <tap device name>] 
                  [-k <encryption key>] 

-h shows a quick reference including all available options
--help gives a detailed parameter description
man files for n2n, edge, and superndode contain in-depth information

较为复杂的配置,自己看/etc/n2n/的example文件
两种节点都支持systemd持久化运行,文件会在安装后自动释放,你只需要参考example编辑新的配置文件:edge.conf/supernode.conf

编写一个跨平台n2n GUI客户端

n2n提供了udp信息展示接口,已有第三方编写的Windows、Android客户端,但是我用的是Gnu/Linux,而我的大部分非自由软件爱好者朋友玩游戏往往使用Windows,所以我需要一个跨平台的n2n客户端提供尽可能一致的用户体验,Python显然是个不错的选择。

设计界面布局

基于n2n的参数需求,需要以下几个必须元素

  • 输入框

    • 服务器地址
    • 社区名称(community)
    • 认证密钥(非必须)
    • 自定义地址(非必须)
  • 选择框

    • 加密方式(非必须,默认AES-CBC)
  • 标签

    • 信息显示框(当前连接状态)
  • 按钮

    • 启动连接

开发难点

编译n2n(Windows),这一个就难到我了,因为我压根就不想下载Visual Studio,并且MinGW构建失败(我还为此购买了Windows10 Pro的激活码,但是还是很遗憾没有成功)。不过,仔细看看了看日志,貌似是因为choco安装MingGW时没有给予足够权限造成的,所以干脆卸载了MingGW,git,make重新安装了一遍。
第二次编译,卡在了make test:

...
cp src/example_sn_embed example_sn_embed
scripts/test_harness.sh tests/tests_integration.list
tests/../scripts/test_integration_supernode.sh >tests/test_integration_supernode.sh.out

这就很糟糕。
不过查看目录发现似乎已经编译成功了。确定可以编译通过后修改了一下编译包版本名称和目标系统名称,Windows10下的编译问题算是解决了。
在WIndows上运行前需要安装TAP驱动下载地址,搜索tap-windows如无其他异常就尽可能使用新版本。比如tap-windows-9.24.7-I601-Win10.exe 至于9.24.8,暂时没有一键安装的二进制应用....

GUI-n2n使用说明

本程序设计使用理念:由了解n2n相关配置方法的开发者/用户为其他用户(你的任何不了解计算机技术的朋友,同学,家人)提前编写好配置文件后直接打包交给用户。

GUI-n2n是使用Python3+tkinter编写的跨平台程序理论支持Linux,Mac,Windows,不考虑兼容Python2的任何版本。对于Windows7用户,请使用Python3.8编译运行。
Windows用户使用前应安装TAP驱动,服务器地址应包含端口,加密密钥可以为空,默认AES-CBC加密(密钥必须为ASCII字符),默认启动后使用当前程序所在目录下的配置文件(GUI-n2n.config)设置,如果你不理解我在说什么则不要修改任何配置。

在WIndows10下也会有类似问题,比如使用Tab自动补全失败的时候。扬声器突然大声dou的一声,很容易打扰别人休息。

参考资料:
linux 关闭主板上的蜂鸣器声音
PC speaker

我当前使用的是Debian11 bullseye +KDE,所以我不必极端的使用 rmmod pcspkr的方式避免触发beep。
通过KDE的“系统设置”→“辅助功能”→“响铃”,我可以关掉他。

元旦那天出去玩,路上骑着自行车突然想起来之前自己在计划表里写通过IPv6传输IPv4单栈应用的TCP/UDP数据,这个想法实际上已经有协议实现了:DNS64配合NAT64实现IPv6 Client访问IPv4 Server,而此操作的主要难点需求就是具有一个IPv4和IPv6双栈服务器运行DNS64程序进行不同IP协议流量的转换。不过我想要的并不是以转发为解决方案,因为这会导致通讯带宽受到ISP限制,特别是在中国这种ISP向云服务用户“勒索式”收取高昂带宽费用的国家,有限的Server上行带宽显然不利于任何服务器转发式解决方案的开展。我当时的想法是,能不能通过IPv6 P2P客户端对仅支持IPv4的应用(比如Unturned)进行代理,实现IPv6下完成软件层的IPv4虚拟组网。换句话说,用IPv6实现游侠联机平台的功能。

组网方案总结

既然转发可行但是受限,我就想到P2P了,总结以下几种方案:

基于IPv4 组网:

难点需求:Server公网IP4地址

基于IPv6 组网:

难点需求: Server和Client均具有IPv6地址,前者必须是公网,后者即使有IPv6地址,也可能存在防火墙阻拦(但基于V6的STUN穿透成功率可能较于IPv4更高。)

目标需求

1.首选基于IPv6 P2P传输在用户本地构建IPv4虚拟专用网络,可设立配置服务器进行引导完成自动化。
2.对于不支持IPv6的客户端通过IPv4/6双栈公网Server进行地址转发完成通讯(高延迟,非硬性需求)
3.通过IPv4 P2P/转发进行组网(高延迟,非硬性需求)

已有的实现

Zerotier是较为知名的,不过我更看好其开源替代:tailscale (专有操作系统的GUI客户端和控制服务器不开源,但是Linux及其他Unixlike相对自由)以及自由的控制服务器替代headscale

折腾headscale一天了

发现最大障碍是宝塔面板这种毒瘤。我必须得早日切换到新的运作模式去。

🤔我意识到我并不需要tls加密混淆或者web控制面板等复杂的东西,所以我应该使用更轻量级且成熟的C语言项目:N2N
所以本文结束

为什么我要更换到Debian?Mint等下游社区对原Ubuntu的修改一定程度上使系统更加开箱即用,但也对一些功能的使用造成了限制,Ubuntu并不是一个彻头彻尾的自由软件,尽管我不追求完全使用自由软件/剔除专有软件,我仍然无法接受自己使用的操作系统可能潜在的法律风险。俄乌战争时期Nginx等软件及过去Apache基金会等组织的行为也表明了任何可能受到国家控制的组织信用均不可信。我不想把自己的自由倾注于不可靠的组织,特别是专有软件厂商和无法摆脱美国等国家影响的基金会。相比Ubuntu,Debian显然是更自由,更容易避免政府影响的选择。

- 阅读剩余部分 -

我现在有一块独立的10寸便携显示屏了,但是我家里目前只有一把键盘。(我当初为什么会蠢到把俩键盘都拿到外面?IDK)所以我仍然需要实现软键盘登录,我不知道我从Debian 官方的非自由固件仓库下载的预装lxqt桌面的镜像版本到底用了什么登陆器,总之这个登陆器没有我想要的小键盘,我也不知道他的名字所以没机会修改配置文件。

破罐破摔

既然默认的不认识那干脆换个认识的,我看到/etc/里有SDDM,很好那就你了。
sudo dpkg-reconfigure sddm

换个名字也很容易找

Arch Wiki:sddm 可以使用 qt5-virtualkeyboard这个虚拟键盘软件包,很遗憾在Debian里不叫这名字(但是也差不多?)。

搜索关键词,Oh它叫qtvirtualkeyboard-plugin

sudo apt install qtvirtualkeyboard-plugin

去看看配置文件/etc/sddm里没有配置文件,Arch Wiki:Arch下Debian下SDDM 的默认配置文件为 /usr/lib/sddm/sddm.conf.d/default.conf。要修改配置,请在 /etc/sddm.conf.d/ 目录下创建配置文件。

cp /usr/lib/sddm/sddm.conf.d/default.conf /etc/sddm.conf.d/sddm.coustom.conf

cp: 无法获取'/usr/lib/sddm/sddm.conf.d/default.conf' 的文件状态(stat): 没有那个文件或目录
WTF
find 也没,我???
那新建空白试试得了。
touch /etc/sddm.conf.d/sddm.coustom.conf

新建不生效,新建/etc/sddm.conf也不行

最终选择

man sddm
看了看,我选择的配置文件路径其实没错,不生效可能因为不完整,因为就写了一句开启软键盘。(这样启动后点一下直接黑屏,进不去桌面)
使用sddm --example-config拿到了当前配置文件,然后把配置文件丢进了/etc/sddm.conf.d/sddm.coustom.conf
为了节约时间避免配置软键盘不生效,我干脆把自启动也配置好了,这次重启后果然直接进入桌面。

我的最终目的?

其实还是为了解决Clash for Windows出现的无法安装系统服务的异常,已知的多种途径都无法解决,其中一次报错提示使我不得不接上HDMI用物理屏幕完成测试。可惜最终还是没能调试解决,不过幸好还能手动安装服务,手动编辑服务配置才完成。

时隔多年,LinuxQQ重新出炉了,最新公测版本和MAC的新版客户端一样采用Electron框架构建。
以下为公测群公告:

Linux QQ 全新来袭

🐧关于体验方式 1、x64架构安装包: https://dldir1.qq.com/qqfile/qq/QQNT/4691a571/QQ-v2.0.1-429_x64.deb
https://dldir1.qq.com/qqfile/qq/QQNT/4691a571/QQ-v2.0.1-429_x64.rpm
https://dldir1.qq.com/qqfile/qq/QQNT/4691a571/QQ-v2.0.1-429_x64.AppImage
2、arm64架构安装包:
https://dldir1.qq.com/qqfile/qq/QQNT/0186a650/QQ-v2.0.1-453_arm64.AppImage
https://dldir1.qq.com/qqfile/qq/QQNT/0186a650/QQ-v2.0.1-453_arm64.deb
https://dldir1.qq.com/qqfile/qq/QQNT/0186a650/QQ-v2.0.1-453_arm64.rpm

🐧关于体验名单 仅限12月6日19点前进群的成员

🐧关于体验反馈 点击主面板左下角的“更多-帮助-意见反馈”进行用户反馈

期待并感谢大家的体验和反馈~

实图展示

仍然需要扫码登录
2022-12-09T07:00:23.png
2022-12-09T07:06:10.png
2022-12-09T07:49:13.png

测试发现的问题

Linux xfox-ThinkPad-E14-Gen-3 5.15.0-56-generic #62-Ubuntu SMP Tue Nov 22 19:54:14 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
  1. Linux Mint 21 x86_64 KDE 环境下默认的快捷键都无法正常响应,但截图功能触发后可以正常截图。
  2. 据说对内存占用作了一定优化,但是仍然无法掩盖Electron框架内置Chromium造成的过量内存占用通病。
  3. 任务栏最小化后台机制依旧毫无改进,点击退出窗口按钮后右侧任务栏依旧没有小图标显示,实际效果等同于窗口最小化。
  4. 点击使用QQ Zone网页进行跳转倒转KIO模块报错
    2022-12-09T07:56:58.png

优点

  1. 延续了Windows客户端良好的DPI缩放适应能力,界面相对美观。
  2. 聊天关键词表情热图功能

未完待续

我选择了Docker部署,因为我不打算继续接触宝塔。

主要坑点:

  1. 在没有更改端口的情况下,默认你必须在防火墙放行23333和24444端口

    当然,出于安全考虑我选择了反代默认端口。
  2. Docker里默认没有Java环境,你必须先在面板里选择构建一个新的JDK17镜像作为运行环境再构建服务器实例。

    因为JAVA环境在容器里,所以进程启动方式选择虚拟化容器并设置端口绑定端口25565:25565/tcp (你想换非默认我没意见,我自己还加上了UDP)
  3. 第一次启动服务器后,你需要手动编辑官方服务端生成的EULA文件把否改为是再重新启动服务器。(不会有人写中文“是”吧?xd)

    MCSM提供了快速的编辑选项,但是我是第一次用这个面板,还没摸索到那里就直接手动改好文件了。

这好像是我第一次在自己的设备(云服务器)上开服务器?

其实我只是不想浪费2c2g4m的服务器罢了=-=,毕竟挂博客没多大占用。不然我就在NAS上开再内网穿透了。

服务器地址:xfox.fun 端口默认25565,懒得搞SRV了

2024年更新:
服务器使用LinuxGSM部署在NAS上,IPv6直连:v6.home.xfox.fun