yanhy的学习记录匣 - 编程 https://yanhy.top/index.php/search/编程/ zh-CN 探索知识的宝箱,记录成长的脚步。欢迎来访Yanhy的博客站,在这里,每一页都是对知识无尽好奇的见证,每个故事都是学习旅程中的珍贵篇章,一起激发灵感,分享进步 Tue, 30 Jul 2024 12:30:00 +0800 Tue, 30 Jul 2024 12:30:00 +0800 移动、天翼云电脑使用DD重装系统 https://yanhy.top/index.php/archives/398/ https://yanhy.top/index.php/archives/398/ Tue, 30 Jul 2024 12:30:00 +0800 yanhy2000 前段时间入手了移动云电脑,结果被意外收回了... 后面发现还是有云电脑需求,干脆入了天翼云电脑试试看。官方系统内容挺多,且有不少后门,干脆自行DD重装一下,顺便做个记录。

DD重装本质上是利用Linux的指令来进行硬盘擦写填充文件。

菜鸟编程:Linux dd 命令用于读取、转换并输出数据。dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

本文使用Github开源项目 reinstall ,并将云电脑系统重装为Windows 10 LTSC 2021

一键重装脚本 English 项目介绍
- 支持安装 16 种常见 Linux 发行版
- 支持用官方原版 iso 安装 Windows,并且脚本会自动查找 iso 和驱动
- 支持任意方向重装,也就是支持 Linux to Linux、Linux to Win、Win to Win、Win to Linux
- 专门适配低配小鸡,解决内存过少导致无法进行网络安装
- 自动判断动静态 IPv4 / IPv6,无需填写 IP / 掩码 / 网关
- 支持 ARM,支持 BIOS、EFI 引导,原系统支持 LVM、BTRFS
- 不含第三方自制包,所有资源均实时从源站点获得
- 有很多注释

前期准备

  • 云电脑准备数据盘1GB以上(重装后系统盘会被全盘擦除,分区也会被清除,需数据盘保留一些软件)
  • 下载软件Todesk_lite到数据盘(用于在云电脑重装后因没有驱动无法控制,只能提供第三方远程软件控制)
  • Github加速器(任意且可选,部分云电脑访问Github艰难,可以备好)

移动云电脑切记需要下载好远程软件在数据盘,并保证软件打开就可以使用,否则在无鼠标驱动下安装远程控制软件相当困难

天翼云电脑实测无需远程,重装系统后仍然可以在官方客户端键鼠操控,也无需强制数据盘

DD重装系统

关闭Windows Defender 保护

打开设置 - 更新与安全 - Windows安全中心,点击左侧病毒与威胁防护,将选项全部关闭。
如使用天翼云电脑,系统可能预装火绒等杀毒软件,直接退出杀毒软件即可。

以管理员身份运行Powershell

使用快捷键Win+X,选择 Windows Powershell(管理员)打开即可

Windows Powershell(管理员)

下载脚本

复制以下脚本,并粘贴到Powershell终端内(右键终端界面即可粘贴)

certutil -urlcache -f -split https://github.299993.xyz/https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.bat
注:这里的脚本使用了Github加速源。如以后该加速源关闭,将无法正常执行脚本,可使用Github原链接,可能需要加速器。
备用链接
国内加速源
certutil -urlcache -f -split https://jihulab.com/bin456789/reinstall/-/raw/main/reinstall.bat

国外(Github原链接)
certutil -urlcache -f -split https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.bat

执行完成
脚本下载完成

执行脚本

复制以下脚本,并粘贴到Powershell终端内(右键终端界面即可粘贴)
这里要安装的为Windows 10 LTSC 2021系统,稳定且性能占用较低。如有其他系统需求,可以在https://drive.massgrave.dev/网站查找所需镜像。

./reinstall.bat windows --iso='https://drive.massgrave.dev/zh-cn_windows_10_enterprise_ltsc_2021_x64_dvd_033b7312.iso' --image-name='Windows 10 Enterprise LTSC 2021'

期间会出现软件安装的窗口,无需理会,等待其自动安装和配置。
当最后几行出现下面内容时则为初期准备完成,可以重启安装

***** INFO *****
windows
Username: administrator
Password: 123@@@
Reboot to start the installation.
You can run this command to reboot:
shutdown /r /t 0
PS C:\Users\Administrator>

脚本执行完成截图

重启云电脑自动重装

在Powershell内输入以下指令,重启系统进入Linux子系统,开始自动DD重装。

shutdown /r /t 0

系统重启后,无需任何操作,一直等待或者关闭云电脑客户端放后台慢慢装即可。花费时间取决于网速和硬盘读写速度,如云电脑为机械硬盘可能会慢一些。
由于我这个天翼云电脑带宽只有50M,因此下载速度特别慢,前前后后需要30到50分钟左右。

全程为脚本自动操作,请勿手动介入,可能会打断脚本。一直等待到系统开机输入密码阶段才算安装完成。

下载镜像中

注:天翼云电脑在重装后还是原系统卸载系统软件,都不影响在官方客户端的控制使用(截至2024/7/30是可行的)。但偶尔会出现弹窗显示异常提醒建议重启,点以后再说即可。

天翼云电脑 忽略弹窗即可

在Linux系统部署完成后,自动重启到Windows安装中。全程无需手动操作,也不要去介入操作,会打断进程。

系统自动安装中

新系统开机

安装完成后自动开机,默认开机密码:123@@@

锁屏界面

移动云电脑需要开机后用键盘打开远程软件,进行远程连接后才能控制。
使用快捷键 Win+E 打开此电脑,方向键选择D盘,并选择Todesk_lite.exe,回车键打开软件进行远程连接。

天翼云电脑可直接用官方客户端控制。

进入系统

天翼云电脑可在修改分辨率手动全盘。重装后无法进行自适应分辨率、硬盘映射等等功能,有需要可使用原系统。
刚安装好的系统分辨率不对,可以手动在桌面-右键-显示设置,手动调整分辨率为1920x1080即可。

系统激活

激活推荐使用HEU-KMS,可参考我前面的文章 安利个Windows激活工具 HEU-KMS

文件传输

最便捷的文件传输方式可使用第三方远程控制软件,进行文件传输;也可以提供各种网盘进行传输。官方客户端文件传输能力失效。

天翼云电脑修复

仔细研究了一下ecloud的驱动相关,按自己需求整理出了适用于官方客户端的驱动优化
修复以下问题:

  • 新系统后双重鼠标指针
  • 调整官方客户端窗口时自适应分辨率
  • 从云电脑内拉拽文件到外面以及相反拉拽文件
  • 剪贴板同步
  • 音频驱动
  • 客户端画质调整

驱动下载

需下载以下链接内三个文件(经fiddler抓包后未发现上报连接,但不排除定时上报。程序已精简过,去除其他服务如远程录屏、打印等服务)

https://yanhy.lanzouj.com/b033zndfuj
密码:5k43

驱动安装

clink天翼云电脑守护程序

先创建好文件夹,在C:\Program Files (x86)\ctyun\clink(也不一定要指定位置,这是原系统安装路径,为确保不出错还是推荐本路径)
解压后,将64文件夹放到clink目录内,如下图

文件夹路径

打开64文件夹,右键点击以管理员身份运行来打开clink_agent.exe和clink_cb_helper.exe。运行后没任何反应,但可以通过任务管理器看到已经在运行了。注:如不使用管理员身份运行,则在一些系统中可能因为没权限导致无法使用部分功能。

驱动软件运行

经多次测试,核心服务程序为必须运行项,否则其他程序无法正常工作,;服务程序则为跟着客户端窗口调整分辨率、剪贴板同步、文件拖拽传输等功能。

音频驱动ecloud_AudioDriver_FullSetup

音频驱动直接双击安装即可

驱动安装界面

drivers天翼云电脑显示驱动

随意解压一个位置,打开文件夹后,选择 qxldod.inf 文件,右键-安装。安装后没有弹窗,但如果第一次安装屏幕会闪烁并修改分辨率为很低的一个状态。

如果前面有安装了守护程序,只需要缩放一下官方客户端窗口,即可自动调整云电脑分辨率大小。

如果不使用守护程序,只安装驱动,可以手动在桌面-右键-显示设置,手动调整“显示器1”的分辨率为1920x1080即可,可以修复双重鼠标指针。(单独安装除了修复双重鼠标指针好像意义不大,经过测试这个驱动貌似就是配合守护程序调整分辨率使用)

结束

当云电脑DD重装后,会失去一些便利的特性,但是同时也有一些好处。使用全新系统,省去官方定制系统臃肿的性能占用和一堆无用的软件,删除官方监控后门,甚至部分云电脑可以重装后直接变成不休眠(天翼云还是会休眠),能更好的由自己控制。

本文部分内容摘抄自该博主(https://kui.li/989.html),如有版权问题请留言,会及时处理

补充:移动云电脑家庭版操作较麻烦,可以参考这篇文章获得更多移动云电脑相关内容:https://www.yuque.com/scynull/cloud/ikxva5t32sii3lrn

本文到此结束,如有更多感兴趣的话题可以关注本博客,不定期更新~

]]>
37 https://yanhy.top/index.php/archives/398/#comments https://yanhy.top/index.php/feed/search/编程/
ESP32-Micropython-蓝牙串口 https://yanhy.top/index.php/archives/279/ https://yanhy.top/index.php/archives/279/ Thu, 17 Nov 2022 03:10:00 +0800 yanhy2000

还是准备玩esp32加小屏幕了,记录一下开发心得,虽然都做到一半多了,但是为了防止忘记或者是因为习惯性记录,还是准备将新学的给记下来,之前WIFI配网都做好了,那就从蓝牙开始吧...
原文参考链接:https://www.bilibili.com/read/cv15007387

环境配置

硬件:ESP32
编程语言:Micropython
编译器:Thonny

Micropython蓝牙

目标:让esp32模块发出蓝牙信号,手机连接并通过软件发送串口数据,模块接收数据并实现点灯效果

基础测试代码:

from machine import Pin
from time import sleep_ms
import ubluetooth   #导入BLE功能模块

ble = ubluetooth.BLE()  #创建BLE设备
ble.active(True)  #打开BLE

#设置BLE广播数据并开始广播
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x03\x09\x41\x42')

运行后,可以在手机上搜索到一个蓝牙设备名为“AB"

如要修改蓝牙名称,可这样修改:

name = bytes("aabbcc", 'UTF-8')
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x02\x0A\x08' + bytearray((len(name)+1,0x09))+name)

一个中文占用3字节储存,而广播数据最多只有31字节,除去硬件配置外,命名也要限制一定字数

广播数据格式可参考:https://www.bilibili.com/read/cv15007387

注:由于esp32模块功率很小,发射的蓝牙信号较小,手机经常连接不上,可通过在广播数据格式内修改发射功率调整,对应的数据为x02x0Ax08 ,完整代码为:

name = bytes("aabbcc", 'UTF-8')
print("蓝牙开始广播")
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x02\x0A\x08' + bytearray((len(name)+1,0x09))+name)


蓝牙可连接后,需要让其处理各种事件,如蓝牙断开、连接以及收发等,可参考以下代码
详情:https://www.bilibili.com/read/cv15039837

from machine import Pin
from time import sleep_ms
import ubluetooth   #导入BLE功能模块

ble = ubluetooth.BLE()  #创建BLE设备
ble.active(True)  #打开BLE(此时设备将处于就绪态)

#设置BLE广播数据并开始广播(开始广播后设备将处于广播态)
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x03\x09\x41\x42')


#定义一个函数,用作蓝牙事件中断
def ble_irq(event, data): # 蓝牙中断函数
    if event == 1: #蓝牙已连接(此时蓝牙将处于连接态)
      print("BLE 连接成功")

    elif event == 2: #蓝牙断开连接(此时蓝牙将从链接态进入就绪态)
      print("BLE 断开连接")
      ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x03\x09\x41\x42')#再次启动广播

    elif event == 3: # 收到新write消息
      print("BLE 收到新消息")

ble.irq(ble_irq) #注册蓝牙中断函数


有了中断函数后,可以更方便监听到蓝牙状态。接下来就是准备连接手机并交互了

蓝牙服务与特性创建,详情:https://www.bilibili.com/read/cv15049793

通过注册蓝牙服务,可以使用安卓APP nRF Connect或者微信小程序 谷雨蓝牙调试 进行数据传输,其中服务id为9011特性一9012为可读可写,9013为可读与通知,从esp32到手机上的消息就是通过9013 Notify这个权限获取信息的。

完整代码:

from machine import Pin
from time import sleep_ms,sleep
import ubluetooth   #导入BLE功能模块
sleep(1)
ble = ubluetooth.BLE()  #创建BLE设备
ble.active(True)  #打开BLE(此时设备将处于就绪态)


#创建要使用的UUID
SERVER_1_UUID = ubluetooth.UUID(0x9011)
CHAR_A_UUID = ubluetooth.UUID(0x9012)
CHAR_B_UUID = ubluetooth.UUID(0x9013)

#创建特性并设置特性的读写权限
CHAR_A = (CHAR_A_UUID, ubluetooth.FLAG_READ | ubluetooth.FLAG_WRITE | ubluetooth.FLAG_NOTIFY, )
CHAR_B = (CHAR_B_UUID, ubluetooth.FLAG_READ | ubluetooth.FLAG_NOTIFY, )

SERVER_1 = (SERVER_1_UUID, (CHAR_A , CHAR_B, ) , ) #把特性A和特性B放入服务1
SERVICES = (SERVER_1, ) #把服务1放入服务集和中
((char_a, char_b), ) = ble.gatts_register_services(SERVICES) #注册服务到gatts


#设置BLE广播数据并开始广播(开始广播后设备将处于广播态)
name = bytes("aabbcc", 'UTF-8')
print("蓝牙开始广播")
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x02\x0A\x08' + bytearray((len(name)+1,0x09))+name)

#定义一个函数,用作蓝牙事件中断
def ble_irq(event, data): # 蓝牙中断函数
    if event == 1: #蓝牙已连接(此时蓝牙将处于连接态)
      print("BLE 连接成功")
    
    elif event == 2: #蓝牙断开连接(此时蓝牙将从链接态进入就绪态)
      print("BLE 断开连接")
      ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x02\x0A\x08' + bytearray((len(name)+1,0x09))+name)#再次启动广播

    elif event == 3: # 收到新write消息
      onn_handle, char_handle = data #判断是来自那个特性的消息
      buffer = ble.gatts_read(char_handle) #读取接收到的消息
      print(char_handle, buffer) #打印消息内容
      ble.gatts_notify(0, char_handle, 'Hello') #回复Hello

ble.irq(ble_irq) #注册蓝牙中断函数

这段代码运行后,通过蓝牙调试软件连接模块后,监听9012特性,可对其发送数据,同时在thonny终端内也可以看到发送的数据,并且每发送一条数据,都会收到来自模块的Notify通道的”Hello"回复。

上述为读写数据创建特定的uuid,下面是较为常用的两种实际应用:
注册电池服务

#创建电池服务和特性的UUID
BATTERY_SERVER_UUID = ubluetooth.UUID(0x180F)
BATTERY_CHAR_UUID = ubluetooth.UUID(0x2A19)

#创建特性并设置特性的读写权限
BATTERY_CHAR = (BATTERY_CHAR_UUID, ubluetooth.FLAG_READ , )

BATTERY_SERVER = (BATTERY_SERVER_UUID, (BATTERY_CHAR, ) , ) #把电量特性放入电池服务
SERVICES = (BATTERY_SERVER, ) #把电池服务服务放入服务集和中

((battery_char,), ) = ble.gatts_register_services(SERVICES) #注册服务到gatts

ble.gatts_write(battery_char, b'\x50') #设置电池电量为80%

注册温湿度服务

#创建环境传感器服务和特性的UUID
ENV_SERVER_UUID = ubluetooth.UUID(0x181A) #环境传感器服务
TEM_CHAR_UUID = ubluetooth.UUID(0x2A6E)   #温度特性
HUM_CHAR_UUID = ubluetooth.UUID(0x2A6F)   #湿度特性

#创建特性并设置特性的读写权限
TEM_CHAR = (TEM_CHAR_UUID, ubluetooth.FLAG_READ , )
HUM_CHAR = (HUM_CHAR_UUID, ubluetooth.FLAG_READ , )

ENV_SERVER = (ENV_SERVER_UUID, (TEM_CHAR, HUM_CHAR, ) , ) #把温湿度特性放入环境服务
SERVICES = (ENV_SERVER, ) #把环境服务放入服务集和中

((tem_char, hum_char, ), ) = ble.gatts_register_services(SERVICES) #注册服务到gatts

ble.gatts_write(tem_char, b'\x06\x08') #设置温度为20.54度(0x0806 = 2054)
ble.gatts_write(hum_char, b'\x09\x07') #设置湿度为18.01%(0x0709 = 1801)

对于一些常用的功能,蓝牙组织联盟已经为其定义好了UUID,我们在开发产品的时候直接使用即可。
16BitUUID定义文档下载地址:https://btprodspecificationrefs.blob.core.windows.net/assigned-values/16-bit%20UUID%20Numbers%20Document.pdf

最后把上面代码结合一起,就可以愉快用蓝牙点灯了!

使用方法:执行代码后,使用谷雨蓝牙连接,并监听9012服务中的read,发送任意数据,收到回复“hello”,发送“led_on”,led打开,收到回复“led on!”;发送“led_off”,led关闭,收到回复“led off!”

from machine import Pin
from time import sleep_ms,sleep
import ubluetooth   #导入BLE功能模块
sleep(1)
ble = ubluetooth.BLE()  #创建BLE设备
ble.active(True)  #打开BLE(此时设备将处于就绪态)
led = Pin(2, Pin.OUT) #led引脚

#创建可读可写可通知的UUID
SERVER_1_UUID = ubluetooth.UUID(0x9011)
CHAR_A_UUID = ubluetooth.UUID(0x9012)
CHAR_B_UUID = ubluetooth.UUID(0x9013)

#创建特性并设置特性的读写权限
CHAR_A = (CHAR_A_UUID, ubluetooth.FLAG_READ | ubluetooth.FLAG_WRITE | ubluetooth.FLAG_NOTIFY, )
CHAR_B = (CHAR_B_UUID, ubluetooth.FLAG_READ | ubluetooth.FLAG_NOTIFY, )

SERVER_1 = (SERVER_1_UUID, (CHAR_A , CHAR_B, ) , ) #把特性A和特性B放入服务1
SERVICES = (SERVER_1, ) #把服务1放入服务集和中
((char_a, char_b), ) = ble.gatts_register_services(SERVICES) #注册服务到gatts


#设置BLE广播数据并开始广播(开始广播后设备将处于广播态)
name = bytes("aabbcc", 'UTF-8')
print("蓝牙开始广播")
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x02\x0A\x10' + bytearray((len(name)+1,0x09))+name)

#定义一个函数,用作蓝牙事件中断
def ble_irq(event, data): # 蓝牙中断函数
    if event == 1: #蓝牙已连接(此时蓝牙将处于连接态)
      print("BLE 连接成功")
    
    elif event == 2: #蓝牙断开连接(此时蓝牙将从链接态进入就绪态)
      print("BLE 断开连接")
      ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x02\x0A\x08' + bytearray((len(name)+1,0x09))+name)#再次启动广播

    elif event == 3: # 收到新write消息
      onn_handle, char_handle = data #判断是来自那个特性的消息
      buffer = ble.gatts_read(char_handle) #读取接收到的消息
      print(char_handle, buffer,str(buffer, 'UTF-8')) #打印消息内容
      if str(buffer, 'UTF-8')=="led_on":
          led.on()
          ble.gatts_notify(0, char_handle, 'led on!')
      elif str(buffer, 'UTF-8')=="led_off":
          led.off()
          ble.gatts_notify(0, char_handle, 'led off!')
      else:
          ble.gatts_notify(0, char_handle, 'Hello')#回复Hello

ble.irq(ble_irq) #注册蓝牙中断函数
]]>
0 https://yanhy.top/index.php/archives/279/#comments https://yanhy.top/index.php/feed/search/编程/
Termux——安卓终端快速入门 https://yanhy.top/index.php/archives/98/ https://yanhy.top/index.php/archives/98/ Mon, 13 Sep 2021 19:59:00 +0800 yanhy2000

为了学习linux,很多时候都是选择装个虚拟机,或者买个服务器来练习linux操作。除了使用wsl或者虚拟机之外,还有一个更便携的linux终端,那便是安卓上的Termux...

95556-ijn6vp91y9f.png


软件介绍

Termux这个软件,可以说是安卓上的linux虚拟机,又不完全是个虚拟机。据官方文档介绍:

Termux is an Android terminal emulator and Linux environment app that works directly with no rooting or setup required. A minimal base system is installed automatically - additional packages are available using the APT package manager.”
“Termux 是一个Android 终端模拟器和 Linux 环境应用程序,无需 root 或设置即可直接运行。自动安装最小的基本系统 - 使用 APT 包管理器可以使用其他包。”

在安卓系统本身环境下,Termux得到了很好的运行优势,无需额外虚拟化操作即可使用linux操作界面。
在使用过程中,只需要像Debian系一样操作即可,你可以使用pkg安装软件包,也可以更换为apt软件包管理器等等。它可以运行很多Arm及Arm64的项目,比如nodejs、python、java等等。
Termux可以用来运行脚本、编译小型项目、学习linux系统操作而不会轻易影响主系统等。


准备工具

  • 一部安卓手机(性能、配置不限,储存大于4g,有root权限最好)
  • Google Play应用商店
  • 科学上网工具


开始安装

下载termux

首先启用科学上网环境,打开Google Play应用商店搜索Termux(该版本较低,可以去F-Droid或者gothub下载),下载安装,安装后打开(期间保持科学网络环境)
也可以去github下载:https://github.com/termux/termux-app/actions/
找到最新构建的版本,选择对应版本下载

打开后会加载几秒钟,随后会进入初始界面(如下图),此时可以关闭科学上网环境

28934-bjwrxl8f6c5.png

使用前非常重要的一步:给Termux换源,并更新软件包。步骤如下:

  • 在较新版本中,官方提供了图形化界面换源方式,可以快速更换,缺点是源站固定无法修改,日常足够使用
    图形化换源界面如图所示

19495-ig76bq3uk6c.png

在Termux中输入指令 termux-change-repo 并回车,将会进入需要更换的。库列表
一般换源只需要更换主仓库(Main repository)即可,空格可以选择取消选择要更换的仓库,默认主仓库是被选择状态
选择后直接回车,进入选择镜像源列表。使用“↓”移动并用空格选择到BFSU源,然后回车即可更换并触发update。这个是国内的北京外国语大学开源软件镜像站,在软件更新、安装时速度会快上不少。
在运行update时可能会报错,因为部分软件包可能未收录原因,但也可以正常使用。如果有特殊需要或者强迫症等,可以参考下面的手动换源到其他源。

  • 也可以手动修改文件来替换源站
推荐清华源(复制执行):
sed -i 's@^\(deb.*stable main\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable main@' $PREFIX/etc/apt/sources.list
sed -i 's@^\(deb.*games stable\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/game-packages-24 games stable@' $PREFIX/etc/apt/sources.list.d/game.list
sed -i 's@^\(deb.*science stable\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/science-packages-24 science stable@' $PREFIX/etc/apt/sources.list.d/science.list

清华源手动修改文件:
执行 apt edit-sources
将文件内第二行deb及后面文件删除
粘贴 deb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable main

中科大源:
sed -i 's@packages.termux.org@mirrors.ustc.edu.cn/termux@' $PREFIX/etc/apt/sources.list

手动更换源后可以输入 pkg up 或者 apt update && apt upgrade来更新软件包,有时候会提示是否安装更新(y/n),推荐选择默认选项,如下图默认选项为N,如果有需要的话可以自行决定。更新过程较长且耗费较多流量,建议wifi下更新

85912-m8ovvan2jun.png


常用软件安装

到了这一步,Termux本身已经配置完成了,你可以在termux上练习使用linux操作,也可以在上面安装相关环境来部署一些小项目。

如果手机有root,可以执行sudo权限,需要先安装sudo包:pkg install tsu

脚本编程环境软件包:nodejs、python,推荐使用独立配置环境方法,当然如果没有特殊需求也可以直接使用apt install python或者apt install node,执行后输入y即可安装。经测试,从apt安装的版本中,nodejs版本为14.15.4;python版本为3.9.7

也可以在终端里面安装java环境,可以参考我之前博客写的树莓派安装java教程,同为arm架构,安装过程大同小异。

如果喜欢折腾,甚至可以在termux安装xfce4桌面,然后通过配置vnc来远程连接termux的可视化桌面

当然,也可以在termux配置静态博客hexo,一方面可以当做本地服务器,浏览器访问127.0.0.1即可访问自己的网站;另一方面,也可以在本地折腾好后打包到服务器。

termux可以直接ssh连接到安装linux系统的服务器。连接方式:ssh root@10.111.111.111 其中,root@表示使用root用户连接到服务器。


优化termux使用

termux我个人认为并非是独立的虚拟机,还是基于安卓系统操作。因此如果需要termux与系统进行文件交互,并非是难事,创建个软连接即可。(有root权限的用户还可以直接去根目录找termux内系统的/目录)

首先开启termux访问手机存储的权限termux-setup-storage,然后手机会弹窗是否授权termux访问储存权限,点击确认
软链接相对于文件夹的快捷方式,创建在termux的home目录,便于访问,同时也可以用文件管理器去修改文件夹内容。先用文件管理器在储存主目录创建文件夹为share(可自行修改),然后打开终端,输入ln -s /storage/emulated/0/share share即可在home目录创建share文件夹,指向主目录的share文件夹。
同时,授权了储存访问权限后会在home目录生成 storage 文件夹,可以通过这个文件夹访问到几个基本文件夹,如download等

67603-mnxknrrv8vb.png

在termux启动时会显示welcome to Termux! 欢迎信息,可以手动编辑nano $PREFIX/etc/motd来修改启动信息

可以使用Termux-ohmyzsh来美化终端,安装sh -c "$(curl -fsSL https://github.com/Cabbagec/termux-ohmyzsh/raw/master/install.sh)" 由于github访问速度不定,可能下载较慢
第一次打开脚本时会列出可调整的颜色、字体,可以随意选择一个,后续要更改颜色与字体,可以输入~/.termux/colors.sh修改颜色或者~/.termux/fonts.sh修改字体
41862-a7wn858fanv.png

其他美化脚本推荐:bash <(curl -L gitee.com/mo2/linux/raw/2/2)


示例演示 - 部署本地hexo静态博客

hexo静态博客特点是无需数据库,只需要在本地使用markdown编写文章后使用hexo框架配合精美的模板即可生成美观的博客页面,适合部署到github等代码托管站。如果有需要,我后续将会出个专门博客的教程。例如下图中,我同学搭建的个人博客站
16589-a51ql1u8737.png

30612-d45qidov5kl.png

工具:nodejs软件包、hexo本体、git软件包

安装:

apt install nodejs
apt install git
npm install hexo-cli -g
npm install hexo-deployer-git --save
apt install openssh

接下来初始化hexo:

hexo init blog
cd blog
hexo g
hexo s

当输入完hexo s后,显示如下图,即可证明hexo框架启动成功,此时可以去打开手机浏览器,输入localhost:4000即可访问自己搭建的第一个网站——hexo博客初始页(如果发现后台很多报错,一方面可能是缺失模块,另一方面可能因为arm架构的设备不能完美支持,只能在本地搭建提供测试等)
90520-hhfibhbnu8e.png

38910-shzn2vh8ne.png

如果需要关闭博客,键入Ctrl+c即可停止


示例演示 - 安装VNC远程控制

vnc用于linux的远程桌面控制比较多。这里简单讲述一下如何对termux进行vnc控制

工具:x11-repo、tigervnc、xfce桌面

安装:

apt install x11-repo
apt install tigervnc
apt install xfce
vncserver

输入完vncserver后会提示设置密码,然后确认密码,接着会提问是否要设置只读的密码(其他功能用),一般选择N即可

引入vnc全局变量:export DISPLAY=":1"
先退出vnc进程:vncserver -kill :1
修改配置文件nano .vnc/xstartup在最后一行加入startxfce4,添加后先ctrl+o保存,在回车确认,在ctrl+x退出编辑

启动vnc指令:vncserver
结束vnc指令:vncserver -kill :1

手机下载一个VNCviewer,添加新连接,ip为localhost:5901,名字随意,点击连接即可(如果报警告可以直接无视,继续连接即可)
连接过程会提示输入密码,密码为刚刚设置的vnc密码,连接成功后如下图
52380-zsnwm92wy3k.png

如果想要每次启动终端自动启动vnc的话,可以输入nano ~/.bashrc,在最后一行添加vncserver即可

vnc可能会中文显示异常等等,需要手动下载字体之类的,本文不再拓展太多


示例演示 - 安装宝塔面板模拟建站(仅root的手机)

宝塔面板,这个让网站运营人员耳熟能详的网站管理面板,功能强大,操作简单易管理,还可以一键部署环境,很多人都使用这个管理网站...在termux中安装宝塔面板,性能较低,仅供参考与学习,不适用于正式生存环境
21252-k61ibrth4qr.png

工具:wget软件包,tsu指令软件包,宝塔安装脚本,浏览器,较长时间

执行指令
apt install wget
apt install tsu
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
如果手机已经root并授权,将会一路执行;如果没有root或者未授权,会显示“are you rooted?”
安装过程较长,由于我手机没有root,所以分享一下在树莓派安装的经验:
执行第三个长指令后,会快速加载安装环境,需要手动输入y才能继续安装。之后要等待很久,安装完会在最后几行显示http://127.0.0.1:8888/xxxx ,其中xxx显示宝塔面板的安全入口,需要把整条网站复制到浏览器才能进入面板;同时会在网址下方显示默认用户名和密码,可以用这个登陆到管理面板
宝塔面板会保持每次打开终端自启动,如果需要更改入口限制开关、账号密码等,可以输入sudo bt(每次只能更改一个东西,再修改需要重新输入指令),然后如下图所示:
60151-mdj9s4u0awf.png

一般我个人喜好输入11关闭入口限制,输入8更改默认端口,输入5更改密码,输入6更改用户名,其他保持默认

第一次登陆宝塔网页,会提示要安装环境。推荐使用LNMP环境(L:linux;N:Nginx;M:mysql/MariaDB;P:PHP),也是大部分网站框架常用环境。如果是在正常服务器安装,推荐使用编译安装,但如果在termux内,使用快速安装即可,编译安装会占用大量系统性能、资源,而且termux安装的宝塔并不适合投入正常使用环境中。至于安装版本,一切默认即可,反正后面也可以手动更换版本,而且termux也用不到太多。

Termux安装Ubuntu

在安卓终端里面体验一把真正的Ubuntu系统!(sudo仍需要root权限)

工具:proot-distro软件包(管理子系统)

安装:

apt update
apt install proot-distro 

安装完后输入proot-distro list可以查看这个软件包支持安装的系统列表
67375-6cyd4z3wk2g.png

这里我们安装Ubuntu系统,可以自行选择更改系统,指令如下:
proot-distro install ubuntu
等显示出Now run xxxxxxx时便为安装成功,安装时间很短,因为都是同一个内核,无需重新下载完整版Ubuntu(也可以多次下载不同的系统,每次下载或者启动只需要输入列表中系统名称即可)

启动Ubuntu时,只需要输入proot-distro login ubuntu即可启动(如果下载多系统,也可以把Ubuntu替换成其他名字来启动)
在Ubuntu内输入exit即可退回默认操作系统

每次启动系统都需要很长一段指令,因此这里提供一种简化指令方法:
在home目录指令nano ubuntu.sh,然后在里面输入proot-distro login ubuntu,接着ctrl+o保存,ctrl+x退出编辑,再修改文件读写权限chmod -R 777 ./ubuntu.sh,之后就可以通过执行脚本./ubuntu.sh快速进入了!

本文到此结束,感谢支持!

部分插图内容来自我同学的个人博客:https://jmzdd-jjly.website/ 欢迎大家前往访问!

]]>
0 https://yanhy.top/index.php/archives/98/#comments https://yanhy.top/index.php/feed/search/编程/
记录一次简单的C语言考试 https://yanhy.top/index.php/archives/70/ https://yanhy.top/index.php/archives/70/ Thu, 17 Jun 2021 19:09:00 +0800 yanhy2000

很快啊,就期末考试了...简单记录一下这次C语言考试的内容,以供后来参考...

Program 1:

定义一个函数,用于实现两个int类型数据的求和功能,并将求和结果返回给调用者。在主函数中分别以变量作实参、常量作实参调用此求和函数

#include<stdio.h>
int sum(int a,int b)
{
    int c;
    c=a+b;
    return c;
}
int main()
{
    int x,y,s=0;
    scanf("%d%d",&x,&y);
    s=sum(x,y);
    printf("%d",s);
    return 0;
} 

Program 2:

编程实现:输出100~300之间不能被3整除的数,每行显示5个数。

#include<stdio.h>
int main()
{
    int i,j,a;
    for(i=100;i<=300;i++)
    {
        if(i%3!=0)
        {
            printf("%d ",i);
            a=(a+1)%5;
            if(a==0)
            {
                printf("\n");
            }
        }
    }
    return 0;
}

Program 3:

编程实现:已知arr数组中有n个无序整数,请对arr数组进行降序排序,然后输出结果。

#include<stdio.h>
int main()
{
    int arr[999]={0},n,temp;
    scanf("%d",&n);//题目没有指定长度,手动输入一个长度 
    for(int i=0;i<n;i++)//输入数组 
    {
        scanf("%d",&arr[i]);
    }
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-1-i;j++)
        {
            if(arr[j]<arr[j+1])//冒泡降序
            {
                temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
    for(int i=0;i<n;i++)//输出数组 
    {
        printf("%d  ",arr[i]);
    }
    return 0; 
}
]]>
0 https://yanhy.top/index.php/archives/70/#comments https://yanhy.top/index.php/feed/search/编程/