admin 管理员组

文章数量: 1086019

作者:张华 发表于:2020-04-18
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

更新

  1. vim这些工具可以使用 git里自带的会更方便
  2. 命令行工具可以伤脑筋windows terminal,它是多tab的

问题

新入手了一台笔记本电脑,默认安装了win10,用了十几年linux了,也一大堆linux的vps维护的太麻烦,还是就只使用单系统的win10吧。那样,问题来了,如何像平时使用ubuntu的习惯一样使用linux呢?

CLI工具的选择

国内网络太慢,所以从来不在国内的机器上跑程序,都是ssh到国外vps上来办公的, 这样主要是使用CLI命令,很少或几乎没有使用GUI工具的习惯。所以选择一个好的CLI工具是决定能否继续使用windows的关键。

  • 能用wsl吗?wsl将linux系统调用翻译成windows调用, 决定了它仅支持CLI, 当然也可以通过windows上安装xming之类的x server来运行某一些GUI(wsl内运行:export DISPLAY=:0.0),但很多GUI是不支持的如chrome与firefox; 另外,wsl也不支持访问底层硬件所以无法运行python pyaudio之类的程序。wsl的优点它可以通过运行’wsl’快速切换到ubuntu bash;也可以通过’wsl ls’之类的命令实现在windows上直接运行bash命令, 这对我这种只熟悉unix命令不熟悉windows命令的人来说吸引力是很大的。所以wsl要结合着用,但主要就是用它的’wsl ls’之类的方便(后面会讲如何通过alias来使用它)。
  • 能用powershell吗?要运行访问硬件之类的python pyaudio程序只能通过powershell, 不能使用ubuntu wsl shell或者cgwin shell. 使用powershell不支持自定义快捷键让我像使用bash的快捷键习惯一样使用它,这个缺点是对我来说是致命的,所以我不能用它。
  • 能用mabaxterm吗?mabaxterm同时集成了wsl shell, cgwin shell, powershell, 但这些全如上面说的不合我的需求。所以只能将它作为备用,偶尔用用它好用的x server, scp等功能。我很少用GUI,所以这对我来说也属于低概率事件,备用着吧。
  • cmder是我最终选用的工具,它的cmder shell支持使用python pyaudio程序,和bash一样的快捷键使用习惯。也集成了git, ssh这些常用的功能,也能通过定义alias别名方便使用wsl bash命令, 也支持tabs。很好,就是它了,现在需要设置它让它更符合我平时使用linux的习惯。

设置cmder的home dir

D:\>wsl
root@DESKTOP-ENUSKP0:/mnt/d# grep -r 'home pat' /mnt/d/soft/cmder/vendor/init.bat -A 3
:: Set home path
if not defined HOME set "HOME=%USERPROFILE%"
%lib_console% debug_output init.bat "Env Var - HOME=%HOME%"
@cd /d "D:/"

定义/bak软链与ubuntu的路径使用习惯相同

root@DESKTOP-ENUSKP0:/mnt/d# ln -s /mnt/d /bak
root@DESKTOP-ENUSKP0:/mnt/d# ls /bak/soft/cmder/vendor/init.bat
/bak/soft/cmder/vendor/init.bat

定义alias别名在cmder shell更方便直接使用wsl bash命令

D:\>cat soft/cmder/config/user_aliases.cmd |tail -n 20
sshxxx=ssh ubuntu@xxx -b 192.168.8.101
ifconfig=wsl ifconfig
awk=wsl awk
head=wsl head
less=wsl less
ls=wsl ls
man=wsl man
sed=wsl sed
tail=wsl tail
route=wsl route
ping=wsl ping
nslookup=wsl nslookup
dig=wsl dig
tar=wsl tar
cat=wsl cat
tee=wsl tee

设置默认使用cmder shell

注: win+shift+s可以快速截屏

标题在General -> Confirm中去掉警告

设置tab相关的快捷键与chrome vimum

其他 - 让windows支持内录

thinkpad x1 yoga只有一个音频口,喇叭在放音的时候就单工了麦克风不能录音了,能让声音内部从喇叭路由到pyaudio程序处理了再内部路由到麦克风吗?答案是需要安装虚拟路由,同时得支持路由在虚拟设备和物理设备间路由。有款叫voicemeeter的软件就是做这件事的。路由设置如下图:

  • 在1处选内装麦克风,同时将A去掉,A代表可以从麦克风处输入声音
  • 2处不选 ,因为只有一个音频物理设备
  • 3处是选虚拟设备的,A,B两处默认都选
    最右侧输出到扬声器

    需要将声音的输入和输出默认都走虚拟设备

    注意:这样,声音就被内部路由到python pyaudio了, 如果外部也能从物理设备录音的话,必须一直开着voicemeeter, 所以按win+r键输入 shell:startup 进入 C:\Users\ThinkPad\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 目录, 将voicemeeter的链接加到这个目录开机就自动启动了. 不过, 我不是这样做的,voicemeeter菜单中有如下的两项开机自动启动并放入拖盘的设置,如下图。

20230209更新 - 小主机连电视后如何同时从HDMI与内置扬声器输出

maxtang NUC通过HDMI连电视后,电脑的声音将通过HDMI从电视出。此时,若在电脑上再装一个带麦的蓝牙耳机,那要求电脑的声音同时从内置的麦克风出到蓝牙耳机和输出到电视。那怎么办呢?仍得用到voicemeter.
下图是用到了纯麦麦克风,卖家说它只能用在鸿蒙电视上,其实它也能用在win11上。需要做以下几步:

  • 将电脑的右下角的小喇叭的输出改成从voicemeter的virtual出
  • 如下图,在voicemeter的最右边的’HARDWARE OUT’处改成同时使用HDMI与扬声器出。
  • 如下图最左侧的HARDWARE INPUT 1处改成使用纯麦的麦克风. 没有第二个麦克风所以HARDWARE INPUT2可以不管, VIRTUAL INPUT用默认。

粘贴到vim全变成一行的问题

如从记事本复制多行内容,然后粘贴到vim却变成了多行,将下图中Ctrl+Shift+V的快捷键设置成Multi lines模式即可。

另一个开机自启的方法

上面介绍了一种开机自启的方法,但对于cmd命令的自启还要写脚本打开shell,再后台运行程序,再关shell。但我的windows shell不熟悉啊。有一种简单的将自己的应用放入服务的方法, 以开机自启frpc为例:

  • 将nssm.exe下载放到和frpc同一级目录
  • 运行:nssm install frpc 会弹出配置服务界面,照着配置就行了
  • 到服务目录设置自动启动它。

安装clink增强cmder的像bash completion一样的命令提示

安装类似于proxychain的proxycap

安装winaera tweaker设置系统代替设置注册表

使用qnap nas

qnap nas设置了nfs server, wsl中由于没nfs内核模块,无法通过autofs设置nfs.
所以直接在浏览器上通过\就可以访问nas了, 或者安装qfinder pro

其他 - 键盘丢失按键的问题

感觉键盘总是丢失按键,似乎是在cmder时发生(not 100% sure), however, 搜到了一个相关的bug - https://github/cmderdev/cmder/issues/258
后来安装双系统后切换到ubuntu后不再丢失按键,所以不是键盘的问题,就是cmder的bug, 见:https://zhhuabj.blog.csdn/article/details/82466639

20220610更新 - 远程解决两例windows问题

昨天媳妇打电话说她同事的电脑键盘不能用但鼠标能用,我平时也很少很少用windows系统,只能远程试着帮她解决.

  • 她说她的键盘是圆口,哦,那是PS2键盘,那么古老,我的第一反应就是会不会古董与新的win10存在不兼容.于是要她换个usb键盘试试
  • 她说usb键盘也不行,换蓝牙键盘也不行
  • 于是要她重启一下机器,她重启了好几次,说也是不行
  • 于是昨天中午,我就带了一个ubuntu启用盘,想过去确认一下是win10的问题,还是电脑硬件的问题.结果到她办公室的时候,还什么也没开始做,那键盘自然就好了.我就告诉她那可能是PS2古董键盘的问题,让她同事换个USB键盘继续用.
  • 今天,她又打电话说,USB键盘也又出同样问题了
  • 于是,搜索微软官方,发现: https://answers.microsoft/zh-hans/windows/forum/all/win10%E7%B3%BB%E7%BB%9F%E6%AF%8F%E6%AC%A1%E5%BC%80/cfd83767-04c4-4e2d-b74b-66f80f21ead3
  • 要她以管理员用户打开cmd运行下列命令后问题就解决了,期间,因为键盘没法用无法输入字符,要求她微信用鼠标拷贝,但粘贴之后没有键盘按回车,要求她使用电脑的屏幕键盘搞定.
reg add HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E96B-E325-11CE-BFC1-08002BE10318} /v UpperFilters /t reg_multi_sz /d kbdclass /f

于是这个问题搞定.上个月,她也打电话问了另一个问题,说chrome无故闪退,我让要换个浏览器,她说她换edge了问题依旧,我说edge用的内核也是chrome内核,也许你应该换个firefox浏览器,结果问题就解决了.至于为什么chrome会闪退那就不得而知了,她的win10系统是更新到最新版的,chrome也是最新版的,但windows不比linux可以轻松获取chrome的core dump来分析一下.我对windows实在不熟不清楚如何获取core dump, 先要她用firefox作为workaround了.

编码问题

可在"region setting"设置中将默认编码从gb2312改成utf-8.
当然即使win10仍然使用gb2312,python程序也可以仍然使用utf-8编码:

  • 添加:# coding=utf-8
  • 该程序如果还要再打开其它可能有中文的文件的话也要处理utf-8: open(‘columns.txt’, mode=‘r’, encoding=‘utf-8’)
    这样utf-8的python程序也能跑在gb2312的windows上了,但windows cmd想要支持utf-8的话,可运行:chcp 65001,或修改注册表,见:https://blog.csdn/ml863606/article/details/86007579

20250112 Update - miniDLNA

家里是两级路由器,想连在二级路由器(192.168.3.0/24)上的手机访问连在一级路由器(192.168.99.0/24)上的照片。所以想试一下miniDLNA,但找不到免费的dlna client (后来将minipc上的wlan0启用就可以了)。 好用的dlna client有:

  • vlc for android既支持nfs又支持dlna, 但有时候不能全屏
  • DmsExplorer, 能全屏,但只能一个个文件放,要多个文件连续播放得自己创建播放列表
  • 其他的client基本上都有广告或收费
sudo rfkill unblock wifi
sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
sudo dhclient wlan0
sudo rfkill list
sudo ip link set wlan0 up
lspci -k | grep -iA2 network
sudo iw dev wlan0 scan | grep SSID
cat << EOF |sudo tee /etc/wpa_supplicant/wpa_supplicant.conf
network={
    ssid="<SSID>"
    psk="<PASSWORD>"
}
EOF
#上面的方法会过段时间IP消失,改成netplan模式
hua@minipc:~$ sudo cat /etc/netplan/01-network-manager-all.yaml |head
network:
  version: 2
  renderer: networkd
  wifis:
    wlan0:
      dhcp4: true
      access-points:
        "quqiAP5G":
          password: "xxx"
  ethernets:

sudo apt install minidlna -y
cat << EOF |sudo tee -a /etc/minidlna.conf
#"A" for audio, "V" for audio, "P" for images
media_dir=PV,/bak/photo
friendly_name=minipcDLNA
network_interface=br-eth0,wlan0
inotify=yes
EOF
sudo systemctl restart minidlna
sudo systemctl enable minidlna
sudo minidlnad -R
#use 'vlc for android' as client, and status page is: http://192.168.99.179:8200/

下面的配置不work, 所以后来用wlan0来bypass的
1, 一级路由器添加静态路由:目标网络为二级路由器子网(192.168.3.0/24),网关为二级路由器WAN口(192.168.99.213)
2, 配置一级路由器的防火墙允许来自二级路由器子网(192.168.3.0/24)的流量访问 MiniDLNA 服务器(192.168.99.179)的端口(默认是 TCP 8200)
root@gw:~# grep -r '8200' /etc/config/firewall -B10
config rule
	option enabled '1'
	option target 'ACCEPT'
	option src 'wan'
	option dest 'lan'
	option name 'Allow-MiniDLNA-From-Secondary-Subnet'
	option family 'ipv4'
	option proto 'tcp'
	option src_ip '192.168.3.0/24'
	option dest_ip '192.168.99.179'
	option dest_port '8200'
root@gw:~# iptables-save |grep 8200
-A zone_wan_forward -s 192.168.3.0/24 -d 192.168.99.179/32 -p tcp -m tcp --dport 8200 -m comment --comment "!fw3: Allow-MiniDLNA-From-Secondary-Subnet" -j zone_lan_dest_ACCEPT

20250212 - 给弟家的盒子做照片备份

1, 盒上插上移动硬盘,会看到设置名 /dev/sda1

root@onecloud:~# fdisk -l |grep sd
Disk /dev/sda: 465.76 GiB, 500105740288 bytes, 976769024 sectors
/dev/sda1        2048 976769023 976766976 465.8G  7 HPFS/NTFS/exFAT
root@onecloud:~# blkid /dev/sda1
/dev/sda1: LABEL="PENDRIVE" BLOCK_SIZE="512" UUID="0EBE1831BE181435" TYPE="ntfs" PARTUUID="00029aa0-01"

加载硬盘
mkdir -p /bak
echo 'UUID=0EBE1831BE181435 /bak ntfs defaults 0 0' >> /etc/fstab
mount -a
ls /bak

2, 盒子上安装samba
apt update
apt install samba -y
cp /etc/samba/smb.conf /etc/samba/smb.conf_bak
vim /etc/samba/smb.conf
[bak]
comment = bak
path = /bak
writable = yes
browseable = yes
guest ok = yes


添加用户(密码:password)
useradd -s /sbin/nologin nasadmin
smbpasswd -a nasadmin

重启服务:
systemctl enable smbd
systemctl restart smbd

(可选)在linux上测试:
sudo apt install smbclient -y
smbclient -L //192.168.98.132 -U nasadmin
smbclient -U nasadmin%password //192.168.98.132/bak -c "ls"
sudo mount -t cifs -o vers=2.0,username=nasadmin,password=password,uid=$(id -u),gid=$(id -g),forceuid,forcegid //192.168.98.132/bak /mnt/share
sudo mount -t cifs -o username=nasadmin,password=password,uid=$(id -u),gid=$(id -g),forceuid,forcegid //192.168.98.132/bak /mnt/share

(可选)在win11上测试(未测试):
直接在文件浏览器的地址栏输入: \\192.168.98.132\bak  , 若需要用户名和密码的话是nasadmin/password

3, 盒子上安装dlna
apt install minidlna -y
cat << EOF |sudo tee -a /etc/minidlna.conf
#"A" for audio, "V" for audio, "P" for images
media_dir=PV,/bak/photo
friendly_name=bingDLNA
network_interface=eth0
inotify=yes
EOF
systemctl restart minidlna
systemctl enable minidlna
minidlnad -R
#use 'vlc for android' as client, and status page is: http://192.168.98.132:8200/


4, 在盒子上安装了one dns tool
systemctl restart ss_dns


使用步骤:
a, 统一将照片存储在samba上 (windows与linux连接samba的步骤见上面)
b, 通过rsync命令可以将samba上照片分发到其他电脑上, 
   注意1:--delete参数有可能删除原有的照片, 若不熟悉rsync命令慎用
   注意2: windows上安装git也可有rsync命令
   rsync -avztur --progress /bak/photo/  ~/photo   
   rsync -avztur --progress --delete /bak/photo/  ~/photo
   rsync -avztur --progress --delete --exclude 'film' /bak/photo/ ~/photo
c, 若不想通过ssh网络来运行rsync上的话,实际上盒子上有两个usb口,可以在另一个usb口上也插入另一个移动硬盘(如是/dev/sda2), 将/dev/sda1上的文件备份到/dev/sda2上的命令如下:
   mount /dev/sda1 /bak
   mount /dev/sda2 /mnt/sda2
   rsync -avztur --progress /bak/photo/  /mnt/sda2/photo

20250215 - 备份我的系统

#backup my working machine
rsync -av --progress \
  --include='.ssh/***' \
  --include='.bashrc' \
  --include='.sesame/***' \
  --include='.gitconfig*' \
  --include='.gnupg/***' \
  --include='.ss*/**' \
  --include='.vim*/**' \
  --include='mygpgkey*' \
  --include='*novarc' \
  --include='*.txt' \
  --include='*.sh' \
  --exclude='*' \
  /home/hua/ /nas/bak/home_backup/
sudo rsync -av --progress \
  --include='rc.local' \
  --include='dnsmasq.conf' \
  --include='dnsmasq*/***' \
  --include='fstab' \
  --include='auto.direct' \
  --include='auto.master' \
  --include='bash*/***' \
  --include='netplan/***' \
  --include='resolv.conf' \
  --include='systemd/' \
  --include='systemd/resolved.conf' \
  --include='systemd/system/' \
  --include='systemd/system/ss*' \
  --exclude='*' /etc/ /nas/bak/etc_backup/
crontab -l > /nas/bak/crontab_backup.txt
dpkg --get-selections > /nas/bak/package_list.txt

#backup my router
scp root@gw:/root/* /nas/bak/gw/
mkdir -p /nas/bak/gw/etc && scp -r root@gw:/etc/config /nas/bak/gw/etc/ && scp -r root@gw:/etc/init.d /nas/bak/gw/etc && scp -r root@gw:/etc/firewall.user /nas/bak/gw/etc/
ssh root@gw -- crontab -l > /nas/bak/gw/gw_crontab_backup.txt

#backup my box
scp root@proxy:/root/* /nas/bak/proxy/
ssh root@proxy -- crontab -l > /nas/bak/proxy/proxy_crontab_backup.txt
rsync -av --progress -e "ssh" --include='.ssh/***' --include='.bashrc' --include='.sesame/***' --exclude='*' root@proxy:/root/ /nas/bak/proxy/
mkdir -p /nas/bak/proxy/etc && rsync -av --progress -e "ssh" \
  --include='rc.local' \
  --include='dnsmasq.conf' \
  --include='dnsmasq*/***' \
  --include='fstab' \
  --include='auto.direct' \
  --include='auto.master' \
  --include='bash*/***' \
  --include='netplan/***' \
  --include='resolv.conf' \
  --include='systemd/' \
  --include='systemd/resolved.conf' \
  --include='systemd/system/' \
  --include='systemd/system/ss*' \
  --exclude='*' root@proxy:/etc/ /nas/bak/proxy/etc/
  
#mobiledisk is on minipc
sudo mount /dev/sdb1 /bak_mobiledisk/                                          
rsync -avztur --progress --delete  --exclude '.Trash-1000' /nas/  /bak_mobiledisk

本文标签: 习惯 Ubuntu Windows