如何优雅地使用Windows学术

如何优雅地使用Windows学术

前几天刚到手了一台Surface

不过我是不太喜欢Windows的很多细节的,特别是写代码的时候,还是Linux原生的git\python\pip\gcc\...一系列的工具好用。特别是Windows下面使用Python操作文件有的时候回出现奇奇怪怪的问题,烦不胜烦,还是Linux大法好啊。

此外,写论文、讲义经常用Latex,我经常会用一些包,比如pgfplot\tikz之类的包画图,但是Windows对这些东西的支持感觉一直不太好,我猜可能主要还是因为gnuplot的原因。

不过Surface也有好处,就是有Office可以用,有Onedrive可以用,而且屏幕好,便捷。所以新到手的Surface,应该系统地配置、改造才满足我的需求。大概过程如下:

1、系统

这方面没啥好说的,新到手的电脑打开就是Win10,不过鉴于Win10更新比较坑,所以不要忘了先更新。此外,诸如打印机之类外设的驱动程序也不要忘了装。

此外,什么杀毒软件之类的爱装就装吧,我反正不装。。。

2、Office、Onedrive

我购买了Office家庭版,装上Office然后登陆就可以了。Onedrive也要登陆。一个小遗憾是Linux下面没有稳定的Onedrive,有可用的,但是可能是网速问题,速度很慢。Mac下面倒是有官方的Onedrive,但是我的Mac已经在家吃灰了。

为了解决这个问题,我在Linux上搭建了一个Samba服务器,这样就可以方便的在两台电脑之间文件互传,部分解决了这个问题。

3、WSL&Ubuntu

接下来是重头戏了。Windows10自带了一个Linux子系统,非常好用。唯一的遗憾是这个子系统是一个虚拟机,还是没办法使用gcc编译出exe,如果有这个需求,可以尝试安装Cygwin。

安装WSL很简单,

控制面板->程序->启用或关闭Windows功能->适用于Linux的Windows子系统

选中确定即可。

接下来,从Microsoft Store中,搜索Ubuntu,找到Ubuntu 18.04 LTS,安装即可。当然,你也可以选择Debian、Fedora、SUSE等其他发行版。

安装好之后,在Powershell或者cmd中输入:

bash

熟悉的Linux操作符就出来了。当然,开始菜单中也出现了Ubuntu的图标。

值得一提的是,如果需要修改hosts文件,WSL下面的hosts修改是没作用的,如果要修改,需要修改:

C:\Windows\System32\drivers\etc\hosts

最后,因为经常使用WSL访问Windows的文件夹,所以我干脆在~/下面做了几个link,方便跳转:

## 做桌面的链接
aragorn@Songjiang:~$ ln -s /mnt/c/Users/username/Desktop Desktop

今后只要 cd Desktop就可以进入Windows的桌面了。

4、Terminal&Cmder

微软的cmd以及Powershell都不是那么的好用,好在微软刚推出了一款颜值、功能都不错的terminal,现在在微软的官方商城可以直接下载使用了。在Microsoft Store里面搜索Windows Terminal,安装即可。

不过刚下载好的Windows Terminal默认打开的是Powershell,为了让他默认打开Bash,按下“ctrl+,”键,找到对应WSL的guid,并将这个guid填到defaultProfile里面去:

重启Windows Terminal就默认打开Bash了。不得不说,真好看。

不过我更加习惯Linux下面Guake的那种一键显示/隐藏的terminal,在Windows下,可以使用Cmder:

https://cmder.netcmder.net

下载下来,然后拷贝到一个地方(比如我放在了 C:\Green\ 下面),然后双击运行就好了。同样,找到settings,可以设置默认的shell:

还可以设置Cmder为一键拉上、拉下的模式,非常方便。

5、VScode

接下来还需要解决写代码的问题。我从Sublime转到Atom,最后赚到了VSCode。现在VSCode支持远程了,意味着我们可以使用Windows下面的VSCode,同时操作WSL子系统里面的shell,包括Python、gcc等所有工具都可以方便调用。

Download Visual Studio Code - Mac, Linux, Windowscode.visualstudio.com图标

下载安装VSCode,第一次打开的时候就会问你要不要装Remote-WSL的插件,安装,然后会看到:

点击左下角的按钮,双击Ubuntu-18.04,会重新打开一个VSCode的窗口,这个窗口就可以使用WSL远程开发了:

6、Xlaunch&LaTeX&Lyx

接下来稍微有点麻烦了。在WSL里面装latex是没有问题的,但是问题在于我习惯使用Lyx,而Lyx是需要图形界面的,Lyx也没有像VSCode那种远程开发的功能,怎么办呢?

其实也简单。就好像Linux中我们如果想要打开远程的图形程序可以使用ssh -X一样,我们就以WSL作为x window的服务器,然后“远程打开”就好了。

然而问题又来了,Windows没办法打开X window啊!没事,XLaunch解决:

Xming X Server for Windowssourceforge.net

安装Xlaunch,然后一系列下一步,状态栏会出现一个X的标志。这样就可以在Windows下面打开X window了。

接下来安装latex和lyx:

sudo apt install texlive-full lyx gnuplot

经过漫长的下载、安装之后,打开Bash,输入:

export DISPLAY=:0.0
lyx

lyx就启动了。

如果不想每次都输入第一行,可以在~/.bashrc中加入这一行即可:

echo "export DISPLAY=:0.0" >> .bashrc

不过如果每次都要先打开Bash,输入lyx进行启动,还是很烦的。可以直接写一个小的批处理程序,比如文件lyx.bat:

bash -c "export DISPLAY=:0.0;lyx"

以后只要双击lyx.bat就可以了。

不过还有个遗憾,每次双击lyx.bat,的确运行了lyx,但是还会伴随着一个cmd窗口。为了解决这个问题,可以将lyx.bat修改如下:

@echo off 
if "%1" == "h" goto begin 
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit 
:begin 
bash -c "export DISPLAY=:0.0;lyx"

以后运行lyx.bat就不会有cmd窗口出现了。

最后,将lyx.bat右键单击->发送到桌面快捷方式,然后将快捷方式拷贝到路径C:\ProgramData\Microsoft\Windows\Start Menu\Programs里面,可以直接在开始菜单中打开lyx,当然也可以固定磁贴。

7、Mendeley

文献管理软件有很多,比如EndNote,NoteExpress之类的,不过我坚持使用Mendeley,不为别的,只是为了跨平台,Linux、Windows、Mac都能用,而且还能再不同电脑之间同步,不要太方便。

安装不说了,懂的都懂。

8、Python&Jupyter

接下来配置Python。由于VSCode可以连接到WSL上开发,所以我们很开心的直接在WSL里面配置Python,比在Windows里面配置方便很多。

安装Numpy\Scipy\Pandas\sckit-learn

sudo apt install python3-numpy python3-scipy python3-pandas python3-sklearn

安装Pip:

sudo apt install python3-pip
sudo pip3 install jupyter
jupyter-notebook --generate-config

接下来配置Jupyter的配置文件,使用任何的文本编辑器打开~/.jupyter/jupyter_notebook_config.py

vim ~/.jupyter/jupyter_notebook_config.py

因为WSL中没有安装浏览器,我们使用Windows的浏览器,因而不需要Jupyter自动打开浏览器,将以下语句行首的#去掉,修改如下:

c.NotebookApp.open_browser = False

此外,Jupyter默认会使用token的方式加密,但是每次token都不一样,就很麻烦,解决这个问题的方法有两个:

(1) 设置一个密码,打开一个Python的命令窗口,输入:

from notebook.auth import passwd
passwd("YourPasswordHere")

以上会输出一个字符串,复制这个字符串,回到jupyter_notebook_config.py文件,将以下语句行首的#去掉,修改如下:

c.NotebookApp.password = 'sha1:***********************'

其中'sha1:***********************'就是上面passwd函数输出的内容。

(2)或者如果密码也不想输入,直接关掉认证token,将以下语句行首的#去掉,修改如下:

c.NotebookApp.token = ''

最后,还可以指定打开的端口,比如指定Jupyter在8888端口打开,将以下语句行首的#去掉,修改如下:

c.NotebookApp.port = 8888

如此,Jupyter基本配置完毕,在命令行输入:

jupyter-notebook

会显示:

aragorn@Songjiang:~$ jupyter-notebook
[I 15:56:35.513 NotebookApp] Serving notebooks from local directory: /home/aragorn
[I 15:56:35.513 NotebookApp] The Jupyter Notebook is running at:
[I 15:56:35.513 NotebookApp] http://localhost:8888/
[I 15:56:35.513 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

然后打开浏览器,在浏览器地址栏输入:localhost:8888/ 就可以正常使用Jupyter了。可以将这个地址放入收藏夹。

下次运行的时候,打开bash,输入jupyter-notebook命令就好了。

当然,如果你愿意,还可以像Lyx那样加一个快捷方式,写一个Jupyter.bat文件:

@echo off 
if "%1" == "h" goto begin 
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit 
:begin 
bash -c "cd ~/;jupyter-notebook"

然后创建一个快捷方式,放到开始菜单,点击一下就运行了。

值得注意的是,以上bat文件运行之后,Jupyter会一直运行,如果想要关掉,必须从任务管理器关,在任务管理器中的名字应该是“python3.6”,所以一次开机只需要运行上面的bat文件一次即可。当然,也可以选择开机自动运行这个文件,就不用每次都打开了。

如果还是希望保留后台的terminal,Jupyter.bat文件的前四行删掉。

9、挂载文件系统Samba

因为我有台台式机上面装的是Ubuntu,两台电脑之间的文件共享就成了很棘手的事情。频繁插U盘肯定是最差的解决方案,我曾经一度使用sshfs,但是在WSL下面不能用。然后我干脆直接使用scp,但是每次都输入那么长的命令也是蛋疼。最后我选择使用Samba实现Windows和Linux之间的文件共享。(Linux之间的文件共享也可以使用Samba,而且还可以直接挂载,更方便的是直接使用sfpt)

当然,也可以在Windows上安装Samba服务器,不过我这里选择在Linux机器上搭建Samba服务器,首先安装Samba:

sudo apt install samba samba-common

然后修改配置文件:

sudo vim /etc/samba/smb.conf

然后修改:

[homes]
   comment = Home Directories
   browseable = yes
   read only = no

最后生成密码:

sudo passwd -a aragorn

之后,在Windows中安装Samba的客户端:

控制面板->程序->启用或关闭Windows功能->smb 1.0/CIFS-> smb 1.0/CIFS客户端

选中即可。

最后就可以在Windows文件夹中输入使用诸如:

\\192.168.1.55\aragorn

的地址来访问了。

10、Wox & Everything

电脑里面程序一大把、文件一大把,有的时候找个文献或者文档真的是要了老命。Mac下面有Alfred非常好用,Windows下面推荐使用Wox+Everything,可以帮助我们任何时候快速打开程序和文件。

Everything & Wox下载链接: Wox-launcher/Wox

先安装Everything,再把Wox放到适当的位置(比如“C:\Green\”下面),然后启动Wox,稍作设置即可。

默认情况下,按Alt+空格 就可以弹出Wox,在这里你可以搜索所有的程序和文件,快速打开:

或者文件:


至此,差不多配置好了,可以开开心心地工作了。

编辑于 2019-10-17

文章被以下专栏收录