作者:张华 发表于:2020-04-18
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明
更新
- vim这些工具可以使用 git里自带的会更方便
- 命令行工具可以伤脑筋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.com/cmderdev/cmder/issues/258
后来安装双系统后切换到ubuntu后不再丢失按键,所以不是键盘的问题,就是cmder的bug, 见:https://zhhuabj.blog.csdn.net/article/details/82466639
20220610更新 - 远程解决两例windows问题
昨天媳妇打电话说她同事的电脑键盘不能用但鼠标能用,我平时也很少很少用windows系统,只能远程试着帮她解决.
- 她说她的键盘是圆口,哦,那是PS2键盘,那么古老,我的第一反应就是会不会古董与新的win10存在不兼容.于是要她换个usb键盘试试
- 她说usb键盘也不行,换蓝牙键盘也不行
- 于是要她重启一下机器,她重启了好几次,说也是不行
- 于是昨天中午,我就带了一个ubuntu启用盘,想过去确认一下是win10的问题,还是电脑硬件的问题.结果到她办公室的时候,还什么也没开始做,那键盘自然就好了.我就告诉她那可能是PS2古董键盘的问题,让她同事换个USB键盘继续用.
- 今天,她又打电话说,USB键盘也又出同样问题了
- 于是,搜索微软官方,发现: https://answers.microsoft.com/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.net/ml863606/article/details/86007579