在Windows上创建同样的Linux操作环境

之前的文章中,介绍了我在GNU/Linux图形界面环境下所使用的工具集合。其基本目的是在保证占用最少系统资源的条件下,将电脑操作效率推向极致。这样的工具组合尤如瑞士军刀一般,简洁、高效、功能全面。与之对应,在Windows系统下,该如何实现类似的操作习惯呢?如GNU/Linux命令行工具与图形界面软件,类似于Sawfish窗口管理器的功能,以及多桌面。本文将介绍我自己的解决方案。

首先,为了能够享用GNU/Linux系统下命令行工具带来的种种便利与高效,我在Windows下安装了Cygwin。Cygwin是一个在windows平台上运行的类UNIX模拟环境,是Cygnus Solutions公司开发的自由软件。Cygwin 提供一个UNIX模拟DLL以及在其上层构建的多种可以在 Linux 系统中找到的软件包,在Windows XP SP3以上的版本提供良好的支持。在Cygwin老的版本中,终端程序基于的是Windows的cmd.exe,无法对其进行字体、颜色风格等的设置。目前Cygwin提供的mintty终端程序则可以进行很好的个性化定置,尤其是可以配置成Solarized色彩风格,具有一定的视力保护功能。这一配置可以在这里下载到。其以bash脚本的形式提供了明色调与暗色调两种风格。只要将风格设置脚本加入到~/.bashrc中即可:

source ~/%your directory%/sol.lightor
source ~/%your directory%/sol.dark

接下来,需要说明Cygwin的使用方式。除了GNU/Linux的命令行工具外,Cygwin提供了相当丰富的X视窗图形界面程序,如Emacs、Octave。而且,相对于Cygwin多年以前的老版本,这些图形界面程序的稳定性已经有了很大的提高,完全可以将它们作为日常必备的软件。而回想数年之前,自己需要分别独立安装专为Windows编译的Emacs、Octave、Gnuplot、Maxima、Texlive等工具,它们之间的相互协作总是存在一定的问题。而现在,所有这些软件可以在统一的Cygwin/X环境下运行,路径名、文件名也都符合GNU/Linux习惯,所以使用起来和在原生的GNU/Linux下是一样的。为了使用这些图形界面软件,我将Cygwin在Windows下的X视窗服务器XWin作为Windows系统的自动加载项,在登录后便会自动启动。启动项的创建可以有两种方式。一是运行startxwin命令:

C:\cygwin64\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; startxwin"

该方式的好处是在X server启动时,会自动运行~/.xinitrc中的内容。这样,就可以自动启动诸如mintty、Emacs这些常用的软件。不过,该方法目前无法成功启动X server。所以需要采用第二种方式,即运行xwin命令:

C:\cygwin64\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; xwin -multiwindow -clipboard"

该方法不去读~/.xinitrc文件,只能在~/.XWinrc中设置系统托盘图标的右键菜单项。因而,无法设置随X server一起启动的程序。

有了Cygwin带来的GNU/Linux下的诸多命令行工具和图形界面软件,那么如何像在真正的GNU/Linux环境下实现类似于Sawfish窗口管理器所拥有的功能呢?例如:

  • 用快捷键启动某个特定程序,但在启动前如果该程序已启动,则将其主窗口调到前台;
  • 用快捷键对窗口进行操作,如最大化、最小化、移动、置于所有窗口前端,等等。

幸好有Autohotkey这个软件,上述Sawfish所拥有的功能都可以用其来模拟。通过配置,我实现的功能有:

  • 交换大小写锁定键Caps Lock与左Control键,对于经常使用Emacs的人来说,这一点是很有必要的。
  • 启动常用程序的快捷键设置:
    • Win+1:Cygwin mintty终端程序
    • Win+2:Total Commander文件管理器
    • Win+3:Emacs
    • Win+4:Stardict电子词典
    • Win+5:Firefox浏览器
  • 窗口操作:
    • Win+m:窗口最大化
    • Win+r:窗口还原
    • Win+i:窗口最小化
    • Ctrl+Alt+j,l,i,k:左、右、上、下移动窗口
    • Win+left,right,up,down:将窗口向左、右、上、下移动直至碰到另一个窗口或者屏幕边界
    • Win+c:让窗口位于屏幕中央
    • Win+=:增加窗口宽度
    • Win+-:减小窗口宽度
    • Win+Shift+=:增加窗口高度
    • Win+Shift+-:减小窗口高度
    • Win+Shift+h:水平最大化窗口直至窗口碰到另一个窗口或者屏幕边界
    • Win+Shift+v:垂直最大化窗口直至窗口碰到另一个窗口或者屏幕边界
    • Win+t:让窗口位于其它窗口上方及恢复其原来层次
    • Win+k:关闭窗口
    • Win+?:显示当前窗口的ahk_class,这对于窗口的匹配有用

以上配置的脚本如下:

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

; swap caps lock and left control
#IfWinActive
+Capslock::Capslock
Capslock::Control

SetTitleMatchMode 2

; Cygwin mintty terminal
#1::
IfWinExist ahk_class mintty
{
   WinActivate
}
else
{
   Run C:\cygwin\bin\mintty.exe
   WinWait ahk_class mintty
   WinActivate
}
return

; Total commander
#2::
IfWinExist Total Commander 7.56a
{
   WinActivate
}
else
{
   Run  C:\totalcmd\TOTALCMD.EXE
   WinWait Total Commander 7.50a
   WinActivate
}
return

; Emacs
#3::
IfWinExist [email protected]
{
   WinActivate
}
return

; Stardict
#4::
IfWinExist 星际译王
{
   WinActivate
}
else
{
   Run, C:\Program Files (x86)\StarDict\stardict.exe, C:\Program Files (x86)\Common Files\GTK\2.0\bin
   WinWait StarDict
   WinActivate
}
return

; Firefox
#5::
IfWinExist ahk_class MozillaWindowClass
{
   WinActivate
}
else
{
   Run C:\Program Files (x86)\Mozilla Firefox\firefox.exe
   WinWait ahk_class MozillaWindowClass
   WinActivate
}
return

; maximize window
#m::
WinMaximize, A
Return

; minimize windows
#i::
WinMinimize, A
Return

; restore window
#r::
WinRestore, A
Return

; move window left
^!j::
WinGetPos, X, Y, , , A
WinMove, A, , X-10, Y
Return

; move window right
^!l::
WinGetPos, X, Y, , , A
WinMove, A, , X+10, Y
Return

; move window up
^!i::
WinGetPos, X, Y, , , A
WinMove, A, , X, Y-10
Return

; move window down
^!k::
WinGetPos, X, Y, , , A
WinMove, A, , X, Y+10
Return

; move window left most
#Left::
WinGetPos, X, Y, W, H, A
; WinMove, A, , 72, Y
WinMove, A, , 0, Y
Return

; move window right most
#Right::
WinGetPos, X, Y, W, H, A
WinMove, A, , A_ScreenWidth - W, Y
Return

; move window top most
#Up::
WinGetPos, X, Y, W, H, A
WinMove, A, , X, 0
Return

; move window down most
#Down::
WinGetPos, X, Y, W, H, A
WinMove, A, , X, A_ScreenHeight - H - 40
Return

; center window
#c::
WinGetPos, X, Y, W, H, A
; WinMove, A, , (A_ScreenWidth - 72)/2 - W/2 + 72, A_ScreenHeight/2 - H/2
WinMove, A, , A_ScreenWidth/2 - W/2, (A_ScreenHeight - 40)/2 - H/2 + 40
Return

; increase window width
#=::
WinGetPos, X, Y, W, H, A
WinMove, A, , , , W+10, H
Return

; decrease window width
#-::
WinGetPos, X, Y, W, H, A
WinMove, A, , , , W-10, H
Return

; increase window height
#+=::
WinGetPos, X, Y, W, H, A
WinMove, A, , , , W, H+10
Return

; decrease window height
#+-::
WinGetPos, X, Y, W, H, A
WinMove, A, , , , W, H-10
Return

; expand window horizontally
#+h::
WinGetPos, X, Y, W, H, A
; WinMove, A, , 72, Y, A_ScreenWidth - 72, H
WinMove, A, , 0, Y, A_ScreenWidth, H
Return

; expand window vertically
#+v::
WinGetPos, X, Y, W, H, A
; WinMove, A, , X, 0, W, A_ScreenHeight
WinMove, A, , X, 0, W, A_ScreenHeight - 40
Return

; toggle window on top
#t::
WinSet,AlwaysOnTop,Toggle,A
Return

; close window
#k::
WinClose, A
Return

; get window class
#?::
WinGetClass, win_cls, A
MsgBox, %win_cls%

最后,想要在Windows下实现多个桌面,则直接安装VirtualWin软件即可。

时间: 2024-10-13 15:27:09

在Windows上创建同样的Linux操作环境的相关文章

putty windows上传文件到linux服务器 & 从linux服务器 下载文件到 windows

从putty官网下载putty软件:putty.exepscp.exepsftp.exe等软件 也可以自己下windows安装包putty-0.63-installer.exe 本人直接下载putty-0.63-installer.exe安装包了,然后直接安装 使用pscp方式从windows上传文件到linux服务器 在CMD命令行中进入到putty安装目录 输入pscp 回车 pscp 跟我们平时使用的linux scp命令操作的都是类似的 现在我直接从windows本地上传一个文件到lin

windows上传文件到 linux的hdfs

一.windows上传文件到 linux的hdfs 1.先在 centos 上开启 hdfs, 用 jps 可以看到下面信息, 说明完成开启 2.在win上配置 hadoop (https://www.cnblogs.com/Jomini/p/11432484.html) 后, 要在 hadoop 的 bin 文件上放以下两个文件(网上找下载), 3.创建 maven 工程, 运行读写程序 pom 文件 <dependency> <groupId>org.apache.loggin

sftp方式从windows上传文件到Linux服务器

今天我一直用scp想实现从windows上传文件到Linux服务器,但是鼓捣了半天也没有实现.后来查资料才发现,scp实现文件的上传和下载貌似只能在Linux和Linux之间实现.(欢迎指正不对的地方) 后来开始转用sftp来解决上述问题,其中也是遇到了不少坑,下面说一下比较合理的步骤: 首先声明,我是在Windows上通过xshell5来连接远程服务器的,连接成功后如下图: 然后用sftp连接远程服务器:sftp 192.168.167.178: 再然后,修改本地上传的文件夹路径:先点击这个按

windows上使用SecureCRT连接linux

前言: SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件.这样操作的时候不必进入到linux桌面,可以更方便的在命令行下进行操作.本文demo是在windows上使用SecureCRT连接虚拟机上的linux,虚拟机本文使用的是VMware 1.使用ifconfig命令查看当前linux的ip地址 eth0 Link encap:Ethernet HWaddr 00:0C:29:19:05:90 inet

利用smba实现windows上写程序,linux上运行

1.在linux下载程序代码(确保获取正确的文件属性) 2.在windows编写代码,对于已有代码,不改变文件权限,如原先为755的,更改文件内容后依然是755的文件,如果要新建文件,默认为644,其它权限,需在linux中用chmod设置 3.更改完成直接在windows上传,上传到服务器的文件权限与linux上传相一致. 第1点没什么奇怪,windows上用git下载代码后会使得文件权限丢失 对于第2点,需要smba中进行设置,其中要把/etc/samba/smb.conf中这几行取消注释就

TCP之Delay ACK在Linux和Windows上实现的异同-Linux的自适应ACK

关于TCP Delay ACK的概念我就不多说了,到处复制粘贴标准文献以及别人的文章只能让本文篇幅加长而降低被阅读完的欲望,再者这也不是什么论文,附录参考文献几乎很少有人去看,所以我把这些都略过了. 和风吹的干皮鞋,吹的断愁绪吗? 写完本文后的补充: 这段话是我写完本文后补上去的.本来我想把这篇文章控制在2000字以内,或者更少的,800-1000字以内,无奈还是说多了...今天心情非常好,因为我竟然在梦里把三亨利之战的细节搞清楚了,迄今,我觉得自己对于西洋史的认知更近了一步,可以说今天是一个里

Xshell实现Windows上传文件到Linux主机

实现从xshell终端linux系统上传rz.下载sz命令文件:只需要安装这个包即可. [[email protected] src]# yum install -y lrzsz 3.从Windows上传文件,上传命令为rz:在Linux命令行下输入rz,上传的文件在当前命令行的目录下: [[email protected] src]# rz 输入rz命令后,会弹出对话框,选择你要上传的文件,选择打开就上传到Linux主机.上传完可以使用ls 查看: 也可以直接拖曳文件到xshell终端. 4.

SSH 无密码访问其它机器 和 Windows 上 putty 无密码访问 Linux 机器

1. 从一台 Linux 机器(ubuntu1)上无密码访问其它机器(ubuntu2) (1)登录 ubuntu1 并切换到用户比如 s1 (2)运行 ssh-keygen -t rsa (3)运行cd .ssh (4)运行 cat id_rsa.pub >> authorized_keys.现在运行  ssh localhost 就可以无密码登录到本机. (5)运行 scp authorized_keys [email protected]:/home/s1/.ssh/authorized_

在Windows上搭建React Native Android开发环境

安卓环境配置 安装JDK 安装完成后,使用命令行检查版本 java -version 安装Android Studio 以及SDK 下载AS和SDK,建议使用http://www.androiddevtools.cn/,这里整理得比较清晰,SDK下载可能要使用国内镜像,具体使用上面的网址有介绍. 这里需要注意设置环境变量ANDROID_HOME 1. 打开控制面板,选择系统和安全->系统->高级系统设置->高级->环境变量->新建,变量名填写ANDROID_HOME,变量值填