0%

Linux 技巧

快捷键

  • 搜索历史命令的快捷键:Ctrl + r
  • Ctrl + f– 向右移动一个字符,当然多数人用→
  • Ctrl + b– 向左移动一个字符, 多数人用←
  • ESC + f– 向右移动一个单词,MAC下建议用ALT + →
  • ESC + b– 向左移动一个单词,MAC下建议用ALT + ←
  • Ctrl + a– 跳到行首
  • Ctrl + e– 跳到行尾
  • Ctrl + d– 向右删除一个字符
  • Ctrl + h– 向左删除一个字符
  • Ctrl + u– 删除当前位置字符至行首(输入密码错误的时候多用下这个)
  • Ctrl + k– 删除当前位置字符至行尾
  • Ctrl + w– 删除从光标到当前单词开头
  • Ctrl + p– 上一个命令,也可以用↑
  • Ctrl + n– 下一个命令,也可以用↓
  • Ctrl + y– 插入最近删除的单词
  • Ctrl + c– 终止操作
  • Ctrl + d– 当前操作转到后台
  • Ctrl + l– 清屏 (有时候为了好看)

MacOSX 集锦

快捷键

  • ⌘ + Q = Quit
  • ⌘ + W = Close window
  • ⌘ + O = Open a file in your application
  • ⌘ + P = Print
  • ⌘ + C = Copy
  • ⌘ + V = Paste
  • ⌘ + X = Cut
  • ⌘ + S = Save
  • ⌘ + Z = Undo
  • ⌘ + A = Select All
  • ⌘ + Y or Space = Quicklook
  • ⌘ + Tab = Cycle through windows
  • ⌘ + ⇧+ 3 = Take fullscreen picture
  • ⌘ + ⇧ + 4 = Take selected area screenshot
  • ⌘ + ⇧ + 4 + Space = Take screenshot of window or menu
  • ⌥ + ⌘ + Escape = Bring up Force Quit window
  • ⌘ + Space = Spotlight search
  • ⌘ +``` (back tick) = Cycle through applications windows
  • ⌘ + . = Cancel operation
  • ⌘ + ⇧ + ? = Open help
  • ⌘ + I = Get Info
  • ⌘ + [ = Go backwards in history in Finder
  • ⌘ + ] = Go forwards in history in Finder
  • ⌘ + Up Arrow = Go to previous folder in hierarchy
  • ⌘ + Down Arrow = Open folder of file in Finder
  • ⌘ + ⌥ + T = Show hide Finder’s toolbar
  • ⌘ + Delete = Move item to Trash
  • ⌘ + ⇧ + Delete = Empty Trash
  • ⌘ + E = Eject disk
  • ⌘ + F = Find
  • ⌘ + G = Next result in Find option
  • ⌘ + H = Hide application
  • ⌘ + M = Minimize
  • ⌘ + N = New window
  • ⌘ + ⌥ + W = Close all windows
  • ⌘ + ⇧ + Z = Redo
  • ⌘ + ⇧ + H = Go to Home folder
  • ⌘ + ⇧ + D = Go to Desktop
  • ⌘ + ⇧ + C = Go to Computer
  • ⌘ + ⇧ + K = Go to Network
  • ⌘ + ⇧ + I = Go to iDisk
  • ⌘ + ⇧ + A = Go to Application
  • ⌘ + ⇧ + U = Go to Utilities
  • ⌘ + ⇧ + G = Go to folder
  • ⇧ + ⌘ + Q = Log out
  • ⇧ + ⌘ + ⌥ + Q = Log out immediately.
  • ⌘ + D = Duplicate in Finder
  • ⌘ + ⌥ + 8 = Turn on Voice Over
  • ⌘ + ⌥ + + = Zoom in (if turned on)
  • ⌘ + ⌥ + – =Zoom Out
  • ⌘ + ⌥ + D = Show/Hide Dock
  • ^ + Eject = Show shutdown dialog
  • ^ + ⌘ + Eject = Close all and restart
  • ⌥ + ⌘ + Eject = Sleep
  • ⌘ + Shift + F = Find file by name
  • ⌘ + R = Refresh widget

[TOC]

C++调用C函数

C++保留了一部分过程式语言的特点,但更重要的是C++是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。下面会对C++的重载overload说明一下。

extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。

加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。

比如说你用C 开发了一个动态链接库,为了能够让C++语言也能够调用你的函数,你需要用extern "C"来强制编译器不要修改你的函数名。

通过例子来说明

标准头文件

1
2
3
4
5
6
7
8
#ifndef __TEST_H  /*防止该头文件被重复引用*/
#define __TEST_H


// some declaration


#endif /* __TEST_H */

这个头文件,对于标准的C程序是没有任何问题的,编译/链接/调用。

改进头文件

但是如果使用C++来调用上面的一些定义函数,就会出现undefined error,这就是由于C++函数重载的原因。

解决方法就是下面的头文件,使用extern "C"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef __TEST_H  /*防止该头文件被重复引用*/
#define __TEST_H

#ifdef __cplusplus //__cplusplus是cpp中自定义的一个宏
extern "C" { //告诉编译器,这部分代码按C语言的格式进行编译,而不是C++的
#endif

// some declaration

#ifdef __cplusplus
}
#endif

#endif /* __TEST_H */

extern “C”的含义

extern "C"代表两方面的意思,extern以及C,也就是说被其修饰的函数是可以被外部调用的,并且是C的函数定义。

C和C++的区别

由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。

比如,同一个函数

1
void add(int x,int y);

c编译后在符号库中的名字为_add,C++中为_add_int_int,可以看到C++中包含了函数名/函数参数数量及类型信息,这也是为什么C++能重载的原因。

如何打标签

标签tag主要是在完成了一个版本后,用于发布该版本。

相关的命令如下:

列出标签

1
2
$ git tag              # 打印出当前仓库的所有标签
$ git tag -l '1.0.*' # 搜索符合模式的标签

创建标签

git标签有两种类型:轻量标签附注标签,创建的方法如下所示:

1
2
$ git tag v1.0-light                 # 创建轻量标签,只有一个引用
$ git tag -a v1.0 -m 'Release 1.0' # 创建附注标签,是个独立对象

一般创建都建议是附注标签(虽然轻量标签没有很多参数),搞个引用没有多大意思。

创建附注标签时,参数aannotated的缩写,指定标签类型,后附标签名。参数m指定标签说明,说明信息会保存在标签对象中。

可以通过git show v1.0来看到标签信息和与之对应的提交信息。

补打标签

打标签不必要在head之上,也可在之前的版本上打,这需要你知道某个提交对象的校验和(通过git log获取)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ git log --pretty=oneline

15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support
0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function
4682c3261057305bdd616e23b64b0857d832627b added a todo file
166ae0c4d3f420721acbb115cc33848dfcc2121a started write support
9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile
964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo
8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme

# 如果此时希望在updated rankfile补打标签,可以通过
# git tag -a v0.1.1 校验和
$ git tag -a v0.1.1 9fceb02

签署标签

如果你有自己的私钥,可以使用GPG来签署标签,只要把-a改为-s即可,也就是signed的意思。

1
$ git tag -s v0.1.1 校验和

验证标签

可以使用

1
$ git tag -v [tag-name]

的方式来验证已经签署的标签,其中v的意思为verify,
此命令会调用GPG来验证签名,所以需要有签署者的公钥,存放在keyring中,才能验证。

后期加注标签

如果对早前的那一次提交忘记加注标签了,那么可以使用git log --pretty=oneline来查看提交的HASH ID,然后使用

git tag -a v1.1 HASH-ID

即可补上标签。

切换标签

切换标签与切换分支命令一样,是用checkout即可,比如:

1
$ git checkout v1.0.0    # 注意前提是版本存在,可以是用git tag先检查一下

删除标签

不需要或者误操作提交一个标签的时候,删除即可,使用的是delete的缩写

1
$ git tag -d v1.1.1

删除远程tag这么用:

1
2
3
$ git push origin --delete tagname
# 或者
$ git push origin :refs/tags/tagname

查看标签信息

用git show命令可以查看标签的版本信息:

1
$ git show v0.1.2

标签发布

一般情况下,git push 不会将tag提交到服务端,我们需要显式的操作,如下所示:

1
2
3
$ git push origin [tag-name]
$ git push origin v1.1.1 #发布版本v1.1.1
$ git push origin -tags #一次发布所有的tag版本

查看某个标签

1
2
3
$ git  tag   		#查看当前分支下的标签
$ git checkout v0.21 #此时会指向打v0.21标签时的代码状态,(但现在处于一个空的分支上)
$ cat test.txt #查看某个文件

XTerm

xterm包的简介

最古老最基础的X Window终端模拟包是xterm。xterm包是在X Window出现之初便已经存在了的,默认包含在大多数X Window包中。

XTerm是一个X Window System上的终端模拟器,用来提供多个独立的SHELL输入输出。

XTerm最先是Jim Gettys的学生Mark Vandevoorde在1984年夏天为VS100写的独立虚拟终端,当时X的开发刚刚开始。很快人们就发现它作为X的一部分比作为独立的程序更为有用,于是它开始针对X而开发。

Gettys曾讲述过有关的故事, “xterm内部如此恐怖的部分原因是它最初被计划开发成一个能驱动多个VS100显示器的单独进程。”(”part of why xterm’s internals are so horrifying is that it was originally intended that a single process be able to drive multiple VS100 displays.”)

xterm包提供基本的VT102/220终端模拟CLI和图形Tektronix 4014环境,尽管xterm是一个完整的终端模拟包,但是运行它不需要太多的资源和内存。由于这种特性,xterm包在针对老硬件设计的Linux发行版中仍然很常见。有些图形桌面环境(比如fluxbox)用它作为默认的终端模拟包。

尽管没有太多炫目的特性,但是xterm包提供了一个非常好的功能,即模拟VT220终端,最新的xterm版本甚至能模拟VT系列的颜色控制码,因而能够在脚本中使用颜色。
按住鼠标几个键同时按下CTRL可以访问xterm的几个菜单。包括xterm主菜单、VT选项菜单和VT字体选项菜单

XTerm Troubleshooting

打开xterm的时候出现下面的警告:

1
xterm: cannot load font -misc-fixed-medium-r-semicondensed--

主要因为丢失了xterm需要的字体包,解决方法如下所示:

1
$ yum install xorg-x11-fonts*

XTerm的颜色系列

XTerm是一个X Window System上的终端模拟器,用来提供多个独立的SHELL输入输出。
而使用xterm可以设置字体和背景的颜色。

1
$ xterm -fg LightGoldenrod1 -bg CornflowerBlue

具体的效果如下所示:

COLOR
COLOR
COLOR
COLOR
COLOR
COLOR
COLOR
COLOR
COLOR
COLOR
COLOR
COLOR
COLOR
COLOR
COLOR
COLOR
COLOR
COLOR

NFS 配置

nfs原理:通过网络,将远程主机共享的文件系统,挂载到本机。

双方在进行nfs通讯时,必须启动portmap(F8中是rpcbind)服务。

1)在主机上启动portmap服务(F8为rpcbind,默认都为开启)

1
service rpcbind start
可以用service rpcbind status 进行检查是否开启。

2)对nfs进行配置(/etc/exports)

修改配置文件/etc/exports

添加如下代码

1
/shared/path    *(rw,sync,no_root_squash)

要共享的目录 允许使用的用户,*表示允许任意用户使用,也可以使用具体的ip,如本机可用192.168.1.168,括号中rw代表可读写,sync未知,no_root_suqash意思是以root权限访问该共享文件夹。

修改完之后,输入:

1
[root@localhost etc]# exportfs -rv

使配置文件生效。

3)在主机上启动nfs服务

1
service nfs start

4)挂载mount

1
mount -t nfs IP:/shared/path /mnt

建议:在配置完nfs后,可以本机挂载自己,试试看,是否配置正确

其间遇到的问题:

1)mount: IP:/sharedpath failed, reason given by server: Permission denied

查看配置文件exports,是否为允许挂载的客户。

2)mount: RPC: Unable to receive; errno = No route to host

首先看是否在同一网段

再者输入:

1
[root@localhost etc]# service iptables status

看防火墙是否开启,有则将其关闭

1
[root@localhost etc]# service iptables stop

3)mount: RPC: Unable to receive; errno = Connection refused

首先看nfs服务是否开启,其次看rpcbind是否开启,如果rpcbind没有运行,那在重新开启rpcbind后,要再restart nfs服务,因为重启rpcbind已对nfs的一些配置造成影响,需要restart。

Mounting NFS shares on Mac OS X

解决MacOS无法挂载NFS,Operation not permitted错误

新装的Openfiler开启nfs之后,用Macbook的图形界面通过

无法连接。

先在服务器上自己挂自己试了一下,没有问题,说明问题可能在Macbook客户端上。
在Macbook上打开终端:

1
# mount -t nfs IP:/ path localpath

#使用保留端口再试一下

1
# mount -o resvport IP:/path localpath

幸福了吗?

白岩松

一个人需要隐藏
多少秘密
才能巧妙地
度过一生
这佛光闪闪的高原
三步两步便是天堂
却仍有那么多人
因心事过重
而走不动
——六世达赖喇嘛
仓央嘉措

梁漱溟先生有关的一本书《这个世界会好吗》,翻到后记,梁先生的一段话,突然让我心动。
梁老认为,人类面临有三大问题,顺序错不得。
先要解决人和物之间的问题,接下来要解决人和人之间的问题,最后一定要解决人和自己内心之间的问题。

青春应当浪漫一些,不那么功利与现实,可现今的年轻人却不敢也不能。房价不断上涨,甚至让人产生错觉:“总理说了不算,总经理说了才算。”后来总经理们太过分,总理急了,这房价才稍稍停下急匆匆的脚步。房价已不是经济问题,而是社会问题政治问题。

一群人急匆匆地赶路,突然,一个人停了下来。旁边的人很奇怪:为什么不走了?停下的人一笑:走得太快,灵魂落在了后面,我要等等它。
是啊,我们都走得太快。然而,谁又打算停下来等一等呢?
如果走得太远,会不会忘了当初为什么出发?

03 让敏感的不再敏感

有些人不喜欢中国,更多的人开始喜欢中国人民,但绝对所有的人都喜欢中国人民币。

注: 精辟

09 三进台湾

所有的生离死别,都发生在一个码头,上了船,就是一生。让你看见我们的父母,一整代人隐忍不言的伤。这是一本你从来没认识过的一九四九。

注: 大江大海

10 靖国神社与垃圾分类

日本大城市中,人们的交通主要依靠地铁。高峰时,车厢里的椅子都能收起来,大家都站着,为了节省空间,到了非高峰期,椅子才放下;而在车厢里,很少有少有人跷二郎腿,打电话也被视为不礼貌的行为;无论购物还是吃饭,都是有秩序地排队,无人加塞儿。

注: 这个没有注意

12 感动,有没有用?

做《感动中国》的主持人,是一件既幸福又痛苦的事情。幸福在于,你可以离感动如此之近;而痛苦在于,当你被感动时,你必须克制,不能放纵泪水一次又一次地滑落。这种痛苦,只有身在其中,才能强烈地感受

注: 感动中国的幸福与痛苦

14 成长的营养:好听的好看的

生命如同一条河流,出发时,还只是清澈的涓涓细流,一路奔腾,慢慢加速,陆续开始有人或事,书或者光影,为这条河流填注力量,增加水流甚至影响方向,每个人都不例外。

注: 生命

15 谁,影响并改变着我?

高中同学与大学同学不一样,后者因学的是同一个专业,即便毕业后天南海北,可行业的关系,还是让大学同学更方便时常见面。而高中的同学,由于上的大学与专业千差万别,聚会的难度就加大了,只能回家

如果有一天,你感觉内心沉静,世事浮沉暂时抽离,而窗外又风和日丽,你试着再听听莫扎特,用你最简单和纯真的心,这时候我相信,真正的莫扎特会在上帝的指使下再度归来。

Linux CentOS7图形界面与命令行界面切换

在图形界面使用 ctrl+alt+F2 切换到终端界面

终端界面 ctrl+alt+F2 切换回图形界面

在命令上 输入 init 3 命令 切换到终端界面

输入 init 5命令 切换到图形界面

如果想系统默认以某种方式启动, 使用systemd创建符号链接指向默认运行级别。

修改方法为:

1.首先删除已经存在的符号链接:

1
$ rm /etc/systemd/system/default.target

2.默认级别转换为3(文本模式):

1
$ ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target

或者默认级别转换为5(图形模式):

1
$ ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target

3.重启即可生效

1
reboot

centos7以下的版本

以管理员权限编辑/etc/inittab

1
2
3
id:5:initdefault:
#改为
id:3:initdefault:

就ok。

Windows远程登陆Linux桌面的方法


Putty

其实这个工具并不是桌面客户端,它只不过是一个远程登陆Linux的命令提示工具,但是我们知道,在Linux中,命令基本上就是一切,所以用这个客户端还是能够做到你想要的任何事情。

Cygwin

这个工具能够做很多事情,登陆Linux桌面只是其中一件。关于这个软件的教程,网上有个达人已经写的非常详细了,详情看这里。这个工具在Linux端是不需要任何配置的。另外要说明的是,你的Linux桌面环境,如果是KDE,那么打开窗口的命令是startkde,如果你不装这个,它会说你的命令无效;如果你装的是Gnome,那么应该使用的命令是gnome-session,详情可以查阅Gnome官方网站

Xming

我估计这是最简单的登陆Linux桌面的方式了。可以到Xming的网站下载Xming软件,因为是Windows软件,所以安装非常简单。安装完成后会有两个快捷方式,一个是Xming,这个是做服务器的,一个是XLaunch,当你启动XLaunch的时候会自动启动服务器。

使用方法也是非常简单的,双击XLaunch图标打开,选择OneWindow-下一步-选择Start a porgram -下一步-输入gnome-session(或者startkde,取决于你的桌面软件)-选择Using PuTTY-输入主机地址、用户名和密码-下一步-下一步-这时候可以选择保存一下快捷方式,以后就不用每次输入了-下一步。完成了,这时候就可以看到桌面了。

开启ssh服务

注:所有上述软件都是几乎SSh协议,如果Linux没有开启这个协议的话,那么是无法连接到桌面的。可以用这样的方法打开SSh服务,在终端中输入ntsysv命令,在打开的窗口中找到SSHD服务,确保SSHD被选中,如果没有则按空格选中,按确定退出:

telnet

Xshell

Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。

Xshell 和SecureCRT的比较:

Screen下的会话不会闪屏,而且可以回滚,这个功能太无敌了Script的执行顺序可以调整,SecureCRT的这个功能实在太呆可以同时发送指令到多个session,这个也不错键盘映射的兼容性要好一些,不用去自己改映射可以展现tunnel等的情况支持布局切换,像gnome-terminal缺憾是对Unicode制表符支持不够好,内置的sftp不怎么好使(该公司有另外的xftp)许可相对便宜,对个人、教育用户是免费的!XShell 和Putty& Pietty的比较:

  支持ZModem协议,putty虽有leputty据说可以实现,但我一直没成功 :(Session保存在文件中而非注册表,管理方便支持tab、自定义脚本、保存密码、多机管理…putty是自由软件,和商用的XShell比较不是很合适。putty也有很多插件可以实现部分有缺憾的功能,用起来会麻烦一些就是了。个人平常还是以putty为主,功能够用,速度飞快。大量机器的管理还是XShell合适。

  注意,XShell在商业环境使用下是需要买许可的。

SecureCRT

基本定义

SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括WindowsUNIX和VMS的远程系统的理想工具。通过使用内含的VCP命令行程序可以进行加密文件的传输。有流行CRTTelnet客户机的所有特点,包括:自动注册、对不同主机保持不同的特性、打印功能、颜色设置、可变屏幕尺寸、用户定义的键位图和优良的VT100,VT102,VT220和ANSI竞争.能从命令行中运行或从浏览器中运行.其它特点包括文本手稿、易于使用的工具条、用户的键位图编辑器、可定制的ANSI颜色等.SecureCRT的SSH协议支持DES,3DES和RC4密码和密码与RSA鉴别.

概念解释

SSH的英文全称是 Secure Shell。

  传统的网络服务程序,如:ftp 和telnet 在本质上都是不安全的,因为它们在网络上用明文传送口令和数据别有用心的人非常容易就可以截获这些口令和数据。而通过使用 SSH客户端与服务器端通讯时,用户名及口令均进行了加密,有效防止了对口令的窃听。同时通过 SSH的数据传输是经过压缩的,所以可以提高数据的传输速度,既然如此我们为什么不使用它呢。SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x 和 2.x。至于具体如何安装服务器端,普通用户就不需要关心了

putty

简介

Putty

  随着Linux在服务器端应用的普及,Linux系统管理越来越依赖于远程。在各种远

程登录工具中,Putty是

  出色的工具之一。

Putty是一个免费的、Windows 32平台下的telnet、rlogin和ssh客户端,但是功能丝毫不逊色于商业的telnet类工具。

  用它来远程管理Linux十分好用,其主要优点如下:

◆ 完全免费;

◆ 在Windows9x/NT/2000下运行的都非常好;

◆ 全面支持ssh1和ssh2;

绿色软件,无需安装,下载后在桌面建个快捷方式即可使用;

◆ 体积很小,仅364KB(0.54 beta版本);

◆ 操作简单,所有的操作都在一个控制面板中实现。

把Putty下载到机器上,双击putty.exe,就出现如图1的配置界面。

  选择“Session”,在“Host Name (or IP address)”输入框中输入欲访问的主机名或IP,比如server1或192.168.9.4。端口号(Port)根据使用的协议有所区别,ssh默认使用22,telnet默认使用23,rlogin默认使用513。

  在“Protocol”单选栏中选择使用的协议,一般是telnet或ssh,这取决于服务器提供的服务。

  在“Saved Session”输入栏中输入任务的名字,单击“Save”按钮,就可以把任务配置保存起来了。

  配置完成后单击“Open”按钮,出现如图2的登录界面,就可以使用Putty连接Linux主机了。

pietty

PieTTY 是由林弘德(Hung-TeLin, piaip)以PuTTY 源代码为基础,在 Windows 上发展的 Telnet/SSH 安全远端连线程式,修正与完整支援亚洲语系字符,可切换多种 Unicode 字符显示方式,提供简易 scp 上传界面,并增加透明视窗、无边框模式等视觉效果。PieTTY 与 PuTTY 同样采用 MIT License,但 PieTTY 目前并没有释出源代码,如果您有非常高度的安全需求,请自行斟酌是否使用 PieTTY。

VNC

VNC (Virtual Network Computing)是虚拟网络计算机的缩写。VNC是一款优秀的远程控制工具软件,由著名的AT&T的欧洲研究实验室开发的。VNC是在基于UNIX和Linux操作系统的免费的开放源码软件,远程控制能力强大,高效实用,其性能可以和Windows和MAC中的任何远程控制软件媲美。 在Linux中,VNC包括以下四各命令:vncserver,vncviewer,vncpasswd,和vncconnect。大多数情况下我只需要其中的两个命令:vncserver和vncviewer。

简介

VNC基本上是属于一种显示系统,也就是说他能将完整的窗口界面通过网络,传输到另一台计算机的屏幕上. Windows服务器中包含的”Terminal Server”、Symantec公司开发的收费软件PCAnywhere、近期流行的Teamviewer、国内的协通XT800、快递通KDT都是属于这种原理的设计,同时这些软件又在VNC的原理基础上做了各自相应改进,提高了易用性、连通率和可穿透内网(Teamviewer、协通XT800、KDT).

特点

  同样可能远程连入UNIX、Linux进行图形化操作的还有流行的Xmanager,VNC与之相比——两者工作原理不一样,后者是远程连入操作系统,所有操作在UNIX、Linux主机服务端进行,即使操作过程中“本地电脑与操作主机网络断开”,也不影响操作的顺利进行;而后者(Xmanager)是通过端口将主机服务器的UI界面引导到本地电脑进行展现,如操作过程出现“本地电脑与操作主机网络断开”,操作将中断失败!如果操作都进行的工作任务非常重要,不能中断,如ORACLE RAC实施,结果是灾难性的!更重要的是,VNC是免费的、开源的,Xmanager你一定是用的破解注册版的。

组成部分

VNC基本上是由两部分组成:一部分是客户端的应用程序(vncviewer);另外一部分是服务器端的应用程序(vncserver)。VNC的基本运行原理和一些Windows下的远程控制软件很相象。VNC的服务器端应用程序在UNIX和Linux操作系统中适应性很强,图形用户界面十分友好,看上去和Windows下的软件界面也很类似。在任何安装了客户端的应用程序(vncviewer)的Linux平台的计算机都能十分方便的和安装了服务器端的应用程序(vncserver)的计算机相互连接。另外,服务器端 (vncserver)还内建了Java Web接口,这样用户通过服务器端对其他计算机的操作就能通过Netscape显示出来了,这样的操作过程和显示方式比较直观方便。

命令描述

vncserver

  此服务程序必须在在主(或遥控)计算机上运行。你只能作为使用者(不需要根用户身份)使用此项服务。

vncviewer

  本地应用程序,用于远程接入运行vncserver的计算机并显示其环境。你需要知道远程计算机的IP地址和vncserver设定的密码。

vncpasswd

vncserver的密码设置工具。vncserver服务程序没有设置密码将不能运行(好习惯)。如果你没有设置,运行vncserver时它会提示你输入一个密码。所以,一般我不会单独运行这个命令来设置密码。

vncconnect

  告诉vncserver连接到远程一个运行vncviewer的计算机的IP和端口号。这样我就可以避免给其他人一个接入的密码。

Xvnc

  一个vnc“主控”程序,一般来说不需要直接运行。(vncserver和vncviewer实际上是Xvnc的脚本)

  查找所有可用的选项,运行:

Xvnc –help

出于安全的考虑,一般不建议直接以超级用户帐号运行vncserver程序。如果你需要超级用户的环境,请以一般用户登录后再使用su命令登录到超级用户帐号。

Vnc****配置(阿斌提供)

打开ssh ,root登陆

sudo service iptables stop

vncserver :1

关闭

打开ssh,zzb登陆

vncserver :2

要关闭的话需先看清各自的用户权限

&——————————————————————————

环境:RedHat Linux 5企业版。

Xwindows:gnome (红帽默认安装的图形界面)

尽管我们可以使用SSH连接远程通过字符界面来操作Linux,但是对于更多熟悉图形人来说是很不方便的,因此开启Linux的远程桌面还是很有必要的。目前有两种比较流行的方式:XDM(X display manager)方案和VNC方案,而我个人比较倾向于VNC方案,一是因为VNC方案配置起来相对比较容易,二是VNC方案支持多种连接方式,比如通过浏览器访问Linux桌面,免去需要安装客户端的麻烦。

接下来进入具体配置说明:

一,确认及安装VNCSERVER。

1,首先确认你服务器是否配置了VNCSERVER,可以在命令行下敲入以下命令查看:

[root@localhost: ~]#rpm -qa |grep vnc

vnc-server-4.1.2-14.el5 #返回VNCSEVER服务器端版本说明你已经安装了VNCSERVER。

2,如果没有安装VNCSEVER,那么从光盘找到安装包进行安装。

首先将光盘挂载(也叫解压)到某个目录这里是在/var/ftp/pub/下面建立了rhel5-64目录

mount -o looprhel-server-5.3-x86_64-dvd.iso /var/ftp/pub/rhel5-64/

然后在/var/ftp/pub/rhel5-64/Server目录下找到vnc-server-4.1.2-14.el5.x86_64.rpm安装包,使用RPM命令直接安装;

rpm -ivh vnc-server-4.1.2-14.el5.x86_64.rpm

二,开始配置VNCSERVER

1,启动VNCSERVER,第一次启动VNCSERVER会提示输入密码,这里分为管理员账户及普通账户,启动方式略有所不同。

管理员:

[root@localhost /]# vncserver

You will require a password to access yourdesktops.

Password: 123456 #输入vnc 连接密码

Verify: 123456 #确认vnc密码

xauth: creating new authority file/root/.Xauthority

New ‘localhost.localdomain:1 (root)’desktop is localhost.localdomain:1

Creating default startup script/root/.vnc/xstartup

Starting applications specified in/root/.vnc/xstartup

Log file is/root/.vnc/localhost.localdomain:1.log

普通用户:

[root@localhost /]#su leo #leo 是用户名

[leo@localhost /]$ vncserver

You will require a password to access yourdesktops.

Password: 123456 #输入vnc 连接密码

Verify: 123456 #确认vnc密码

xauth: creating new authority file /home/leo/.Xauthority

New ‘localhost.localdomain:2 (leo)’ desktopis localhost.localdomain:2

Creating default startup script /home/leo/.vnc/xstartup

Starting applications specified in /home/leo/.vnc/xstartup

Log file is /home/leo/.vnc/localhost.localdomain:2.log

#这里要注意:每个用户都可以启动自己的VNCSERVER远程桌面,同时每个用户可以启动多个VNCSERVER远程桌面,它们用ip加端口号:ip:1、ip:2、ip:3 来标识、区分,使用同一端口会使另外登录的用户自动退出。另,VNCSERVER的大部分配置文件及日志文件都在用户home目录下.vnc目录下。

用户可以自定义启动号码如:

[leo@localhost /]$ vncserver :2 #注意:2前面一定要有空格。

A VNC server is already running as :2

三,相关桌面配置,RedHat Linux支持两种图形模式:KDE模式和gnome模式。

1,你的RH使用的什么图形模式这个一般只有登录到图形界面查看一下才能知道,或者通过ps -A命令列出所有当前运行的程序,看看有没有KDE或者gnome字样来判断一下。

如果你是gnome桌面,那么你需要修改/root/.vnc/xstartup的配置文件。

[root@localhost .vnc]# vi xstartup

#!/bin/sh

# Uncomment the following two lines fornormal desktop:

# unset SESSION_MANAGER #将此行的注释去掉

# exec /etc/X11/xinit/xinitrc #将此行的注释去掉

[ -x /etc/vnc/xstartup ] && exec/etc/vnc/xstartup

[ -r $HOME/.Xresources ] && xrdb$HOME/.Xresources

xsetroot -solid grey

vncconfig -iconic &

xterm -geometry 80×24+10+10 -ls -title“$VNCDESKTOP Desktop” &

gnome-session gnome #添加这一句是连接时使用gnome 桌面环境

twm &

设置修改完毕最好是重启一次系统,否则设置不会生效。我采用的方法是杀死VNCSERVER进程再重运行VNCSERVER。

[root@localhost .vnc]#vncserver -kill:1 #这里你启动vncserver时是什么端口号要对应上。

[root@localhost .vnc]#vncserver :1 #重启VNCSERVER,注意:1前面一定要有空格。

2,设置用户信息及分辨率。

[root@localhost: ~]#vi/etc/sysconfig/vncservers

# The VNCSERVERS variable is a list ofdisplay:user pairs.

#

# Uncomment the lines below to start a VNCserver on display :2

# as my ‘myusername’ (adjust this to yourown). You will also

# need to set a VNC password; run ‘manvncpasswd’ to see how

# to do that.

#

# DO NOT RUN THIS SERVICE if your localarea network is

# untrusted! For a secure way of using VNC,see

#<URL:http://www.uk.research.att.com/archive/vnc/sshvnc.html >.

# Use “-nolisten tcp” to prevent Xconnections to your VNC server via TCP.

# Use “-nohttpd” to prevent web-based VNCclients connecting.

# Use “-localhost” to prevent remote VNCclients connecting except when

# doing so through a secure tunnel. See the“-via” option in the

# `man vncviewer’ manual page.

VNCSERVERS=”1:root 2:leo” #此处添加用户,一般只添加一个1:root也就行了。

VNCSERVERARGS[1]=”-geometry 800×600-nolisten tcp -nohttpd -localhost”

VNCSERVERARGS[2]=”-geometry 1024×768-nolisten tcp -nohttpd -localhost”

#注意:上面是分别设置的root和leo两个用户的分辨率,注意是用端口号区分的。

另外也可以通过命令行临时修改分辨率及色深,这种方式重启后就会丢失,这里暂时用不到,命令如下:

[root@localhost: ~]#vncserver -geometry 800×600 #设置vncserver的分辨率

[root@localhost: ~]#vncserver -depth16 #设置vncserver的色深

到这里VNCSERVER服务器端就配置完成了。

四,客户端连接及使用。

1,访问方式

a、在linux下,运行vncviewer命令即可,服务器地址的写法形如192.168.1.11:1

b、在windows下,运行windows版本的vncviewer即可,用法与linux下相近。

c、用浏览器(平台无关),作为javaapplet来实现,以形如http://192.168.1.11:5801 的方式来启动 (vnc 端口从5800 开始依次类推,一般会是5800,5900)

以下为一些常识:

2,修改密码

运行vncpasswd即可

3,停止vncserver

#vncserver -kill :1

#vncserver -kill :2

注意到vncserver只能由启动它的用户来关闭,即时是root也不能关闭其它用户开启的vncserver,只能用kill命令暴力杀死进程。

4,稳定性设置

vncserver默认在多个客户机连接同一个vncserver的显示端口时,vncserver端口旧连接,而为新连接服务,可通过-dontdisconnect拒绝新连接请求而保持旧的连接。

5,同一个显示器可以连接多个客户机

#vncserver -alwaysshared

6,重启服务

service vncserver restart

7,让系统启动时自动启动VNCSERVER。

使用VNC连接登录到RedHat Linux图形界面,点击“系统”——“管理”——“服务器设置”——“服务”,在“后台服务”中找到VNCSERVER后勾选它,点击保存即可。

解决连接不上问题的方法:

1、防火墙开启 不能连接

关闭防火墙 service iptables stop

查看防火墙状态 service iptables status

查看进程 ps axf | grepvnc/iptables

XManager

Xmanager 是全新标准的跨平台集成解决方案。它是一个一站式解决方案,这个软件包含有以下一些产品:Xmanager3D(OpenGL),Xshell,Xftp和Xlpd。

Xmanager PCX Server

Xmanager是一个运行于MS Windows平台上的高性能的X window服务器。你可以在你的本地PC上同时运行Unix/Linux和Windows图形应用程序

Xshell

Xshell是一个用于MS Windows平台的强大的SSH,TELNET,和RLOGIN终端仿真软件。它使得用户能轻松和安全地从WindowsPC上访问Unix/Linux主机。

Xftp

Xftp是一个用于MS Windows平台的强大的FTP和SFTP文件传输程序。Xftp让你能安全地在Unix/Linux和Windows PC之间传输文件。

Xlpd

Xlpd是一个用于MS Windows平台的LPD(行式打印机虚拟后台程序)应用程序。安装了Xlpd后,你的带有打印机的本地PC就成为了一个打印服务器,来自不同远程系统的打印任务都能在网络环境中得到请求和处理。(共享软件)

Xstart

Xstart是一个窗口化的登陆界面,要求填入session,host,protocol,user name, password。可进行远程登陆。

Xmanager 配置

我用的是RedHat Enterprise Linux 5.4和最新的Xmanager Enterprise3.0。首先先来了解一下什么是Xmanager。Xmanager全称Netsarang Xmanager,是国外一套非常优秀的远程监控软件。在UNIX/Linux和Windows网络环境中,Xmanager是最好的连通解决方案。我推荐大家下载Enterprise版本,企业版带的工具更多功能更强大。我们通过Xmanager连接Linux远程桌面进行图形化管理其实就是利用了Xmanager套装里面的Xbrowser程序。当然Linux远程图形化管理除了Xbrowser,还有同样优秀的VNC。下面介绍用Xbrowser连接Linux远程桌面的详细配置。都是我亲自测试过的,放心往下看吧!

一、如果你查过网上的资料你就会发现:RedHatEnterprise Linux 5与RedHatEnterprise Linux 4对于Xmanager的配置是不同的,前者没有/etc/X11/gdm/这个目录,它的gdm的配置文件放在/usr/share/gdm/custom.conf。

其实网上的写错了!!这里不是custom.conf,而是defaults.conf!反正我的RedHatEnterprise Linux 5.4是这样的,可能其它5系列版本不一样也没数的。

在/usr/share/gdm/defaults.conf里确保有以下几句配置(我在最后面直接加了这几句):

Enable=true
DisplaysPerHost=10
Port=177

二、在/etc/inittab里把默认级别改为5:
id:5:initdefault:

再把最后一句里
x:5:respawn:/etc/X11/prefdm -nodaemon
改成
x:5:respawn:/usr/sbin/gdm(注意这里是sbin,不是bin,网上的又错了,害得我前几次都没能成功,妈的!还好我后来自己发现了这个问题。)

三、让Root登陆Xmanager

以上修改之后,root用户还不能通过Xmanager远程登录Linux,还要继续修改/usr/share/gdm/defaults.conf文件,在[security]字段里开启以下两项:
AllowRoot=true
AllowRemoteRoot=true
我发现AllowRemoteRoot这一项可以不开启,看我的配置,它还是false,如下图:

四、开启Linux防火墙的177 UDP端口。

Xmanager连接gdm用的是UDP的177端口,所以防火墙上一定要打开这个端口,如下图:

  最后是重启系统。这样就小功告成了!在Windows系统上运行xmanager3里的Xbrowser程序,在里面新建一个Xmanager Session,在Host这里输入ip地址,其它配置都不要改变(包括端口号),确定退出。

  然后双击这个New Xmanager Session,进入登录界面,输入用户名和密码以后就可以登录到Linux的远程桌面了。

  最后再给大家几个用于检测和测试的Linux命令:

lsof -i:177
查看是否运行成功了!

etc/hosts
查看ip。有的时候连接不上可能是因为你的hosts文件里配置的IP地址不对。

/usr/sbin/gdm-restart
重启gdm。

Xming + PuTTY 在Windows下远程Linux主机使用图形界面的程序

2008-04-1813:31

使用cygwin X server实现Linux远程桌面 (forwindows)

在windows上访问linux有多种方法:

对于习惯使用命令行的人来说,可以使用终端的方式进行访问,也就是通过telnet, ssh等方法远程登录到linux主机,对其进行访问。至于登录软件,既可以使用windows自带的命令行界面,也可以使用专门的终端软件,例如putty, secureCRT等。其中putty是免费软件,而secureCRT并不是。

对于习惯使用图形界面的人来说,更希望以图形界面的方式来访问linux主机。主要有以下几种方法:

· 使用vnc技术。网上这方面的文档很多,我也写过一篇:用VNC实现远程桌面共享(支持Windows,Linux, …)

· 在windows上提供一个X server,linux主机上X client程序通过XDMCP协议 (X Display Manager Control Protocol)使自己显示在windows上。

今天我主要介绍第二种方法。

有很多软件在windows上实现了X server的功能,例如XmanagerHummingbirdExceedcygwinX server,以及XmingX Server for Windows。前两个都是商业软件,需要付费使用;cygwin和Xming是免费软件。本文主要介绍如何使用cygwin X实现Linux的远程桌面。关于Xming X server的使用请参见其主页。

先调动一下大家的积极性,看看最终的效果图:

点击查看大图

[ 背景知识 ]

网络上有很多关于X的背景知识,如果你想对X了解的深入一些,去网上搜索一下吧。

这里是王垠写的”理解Xwindow“,介绍了X server, X client, 窗口管理器,桌面环境相关的知识,读一下对理解本文也有帮助。

好了,现在我们开始配置。

[ 安装cygwin ]

Cygwin项目的目的是在windows主机上提供一个类UNIX的环境,网络也有很多相关的资料。大家可以看一下这一篇:Cygwin使用指南,这篇文章在网络上流行比较广,作者未知,上面提供的仅是其中一个链接。

如果你的计算机上还没有cygwin,首先需要安装它。

这个过程很简单,先到cygwin的主页去下载setup.exe,然后使用setup.exe进行安装。在安装的过程中需要选择要安装的组件,此时需要把X server组件选上。

这里有一个安装指南,虽然是英文的,不过看抓图就可以了。

选择X server组件时,其实只需要选择xorg-x11-base,选中它之后,其它相关组件会自动被选中。

在安装cygwin时,记得把expect这个软件装上,它位于interpreters类别下面。我会在后面的章节中说明为什么要安装这个组件。

[ 运行cygwin X server]

在运行X server前,先假定一下我们的组网。

我们假设X server运行在一台windows XP计算机上,此机器的IP地址是192.168.190.91。

我们的Linux主机上将运行X client程序,它的IP地址是192.168.190.15。

在你的安装目录中找到c:cygwinusrX11R6binstartxwin.bat(假设你把cygwin安装在c:cygwin目录),双击它就会启动X server,同时会启动一个终端(这个终端运行在Windows本地),效果如下图:

点击查看大图

现在,我们要允许远程的X client对X server进行访问,因此,在终端中输入下面的命令,

xhost + 192.168.190.15

接下来,我们要到X client所在的计算机上进行配置,使用telnet或ssh登录Linux主机(192.168.190.15),然后运行下面的命令,

export DISPLAY=192.168.190.91:0.0

xterm &

gvim &

上面第一条命令设置DISPLAY变量,它表示X客户端将使用192.168.190.91上的0.0来显示自己。192.168.190.91是运行cygwin X server的Windows计算机(它的防火墙要打开X server所监听的端口,通常为6000)。

后面两条命令则在Linux主机上(192.168.190.15)启动了两个程序,一个是xterm,另外一个是gvim,我们发现这两个程序启动后,并没有显示在Linux主机上,相反,它们显示在了windows主机上。下图是执行完上述命令的效果图,我使用putty远程登录到Linux主机上,然后执行上述命令:

点击查看大图

用这种方法,你可以在Linux主机上运行任何图形程序,并把它显示到windows上。

如果你想把诸如KDE、GNOME这样的桌面环境也显示到windows上,就需要做些调整。

[ 运行桌面环境 ]

在此我以KDE桌面为例。要把KDE桌面环境显示到windows上的X server中,需要更改一下X server的启动批处理。

首先备份一下c:cygwinusrX11R6binstartxwin.bat,然后使用文本编辑器打开此文件,找到下面这行:

%RUN% XWin -multiwindow -clipboard -silent-dup-error

去掉”*-multiwindow*“参数:

%RUN% XWin -clipboard -silent-dup-error

我们通常不需要启动一个xterm窗口,因此找到下面这行:

%RUN% xterm -e /usr/bin/bash –l

把它注释掉:

REM %RUN% xterm -e /usr/bin/bash –l

好了,批处理文件改完了。

回想一下上面的操作,在启动了X server后,我们执行了xhost命令来设置允许哪些计算机连接到X server,现在我们可以在配置文件中设置它。打开一个cygwin窗口,输入下面的命令:

echo “192.168.190.15” >> /etc/X0.hosts

上面的命令会在/etc/X0.hosts文件中加入你想允许的X client,你可以在此文件中加入你的X客户端。因为我们使用的DISPLAY是0,所以在文件/etc/X0.hosts中增加;如果使用DISPLAY 1,则需要修改文件/etc/X1.hosts文件。现在启动X server后,192.168.190.15就被自动允许接入了。

现在我们再次双击startxwin.bat批处理,执行后就会出现一个丑陋的空白窗口,这就是所谓的根窗口。之所以是空白的,是因为现在还没有运行任何窗口管理器。别急,我们使用telnet或ssh远程登录Linux主机,执行命令:

startkde &

哈哈~~~本文开头所展示的KDE窗口出来了!!!现在你在KDE中运行任何程序,它们都运行在Linux主机上,却把结果显示在Windows主机上。

[ 创建快捷方式 ]

在上面的操作中,启动X server后,需要使用telnet或ssh登录到Linux主机,才能启动自己想要的X client程序,有没有更简单的方法?

现在我们就需要用到expect软件了。这是一个如此有用的软件,以至于我忍不住要在这里插一段广告。

Expect为用户提供一种机制,使用户能够自动执行一些交互式的任务。例如,通常我们在使用telnet的时候,都需要手动输入用户名、密码才能登录。而使用Expect,我们就可以实现全自动的telnet交互,不需用户干预。Expect由Don Libes开发,基于TCL内核,它的主页在http://expect.nist.gov/

广告时间结束,我们继续。我使用expect编写了如下的TCL/EXPECT脚本,它可以使用ssh自动登录到指定Linux主机,然后启动我们需要的程序。程序如下:

#! /bin/expect -f

# Change these variable to yours

set user {easwy}

set host {192.168.190.15}

set xserver {192.168.190.91}

set password {123456}

set program {startkde}

set timeout 5

set done 0

spawn ssh “$user@$host”

while {!$done} {

​ expect {

​ “*(yes/no)?*”{

​ # If the 1st timerun ssh, it will prompt continue or not

​ # answer yes

​ exp_send”yesn”

​ }

​ “assword*” {

​ # Answer password

​ exp_send”$passwordn”

​ }

​ “$*” {

​ # Exit the loop

​ incr done

​ }

​ “#*” {

​ # Exit the loop

​ incr done

​ }

​ timeout {

​ # Timeout

​ exp_send_user”Login timeout, please check!”

​ }

​ }

}

# Set DISPLAY environment variable

exp_send “export DISPLAY=$xserver:0n”

# Start your program

exp_send “nohup $program &n”

expect -regexp {[[0-9]] [0-9]}

exp_send “n”

# Finished

把上面的内容保存为一个文件,例如,保存为cygwin的~/login.exp。注意:把脚本起始处的5个变量替换成你自己的,只需要替换大括号中间的内容。使用telnet的朋友请自行修改此脚本。

下面我们再改一下c:cygwinusrX11R6binstartxwin.bat文件,在此文件的最后增加:

REM Start your X client program

%CYGWIN_ROOT%binrun -p /bin expect -f ~/login.exp

我们使用expect来执行刚才保存的~/login.exp。

现在,我们右击startxwin.bat文件,选择“发送到桌面快捷方式”。以后,只要你双击此快捷方式,就能立刻在Windows上使用Linux主机上的程序了。

在上图中共开了三个终端,它们分别运行在不同的主机上,却都在Windows主机上进行输入输出。这就是X window的魅力了,如果你愿意,你还可以把其它Windows及Linux主机上的程序显示到这个X server中,正所谓一”桥”飞架南北,天堑变通途。

在本文完成后,经网友jiachunyu介绍,才知道有一个名为XWinLogon的软件,它也是使用cygwin的X server实现Linux的远程桌面。相比之下,它的安装和使用都简单了很多。这个软件的主页在:http://sourceforge.net/projects/xwinlogon/

或者

http://www.calcmaster.net/visual-c++/xwinlogon/

有兴趣可以试一下。

上述方法大多经过试验。

如果各位有更好的方法,请告诉我一声。