Why Mac OS X is great than Windows

本文豆瓣讨论请猛击此处

为什么Mac OS X Mountain Lion比Windows伟大?如果你拥有一台iPhone和一台Mac笔记本,还有一台Apple TV,并且Mac笔记本中运行的是Mac OS X Mountain Lion,你会明白什么叫硬件、软件一体化的解决方案,你会明白原来生活中所有需要的电子产品能够提供的辅助功能,这一套设备就全部提供了,你会明白为什么说Mac OS X比Windows伟大。

在Mountain Lion没有推出之前,很多人说这样一个Lion加强版怎么还要再收费100多人民币呢?也许Mountain Lion确实是Lion的升级版,但是这个升级版却可以说是划时代的,它几乎全面打通了Mac OS X和iOS的交互,在这个版本之后,Apple的Mac OS X操作系统真正地作到了比Windows伟大。

Notes用于记事,Reminders用于备忘和计划,iWorks用于企业文档,TextEdit和Preivew用于普通文本文件和图片的浏览,Notification Center集成了多种社会化软件的功能,iTunes用于iOS软件的下载安装,App Store用于Mac OS X的软件下载安装,Game Center用于那些游戏是生活一部分的人的交互,而这一切都以iCloud作为云服务的支撑,只需要在系统中创建一个Apple ID。这种深入到骨髓的云化在Mac OS X Mountain Lion中表现的淋漓尽致。

如果你只有一个Apple产品,这种遍布系统各个角落的云化可能并不能让你有深刻的体验,但是如果你拥有多个产品,不需要太多,一部Mac笔记本,一个iPhone,一台Apple TV(当然你还需要一个真正的电视),一个人的生活中所有需要的与电子产品相关的娱乐(比较基本的娱乐)以及一个人的工作中所有需要的与电子产品相关的硬件软件,就可以完全搞定了。

我并不知道最终的Windows 8会是什么样,但是至少从测试版中我只发现不过是一个加了Metro样式壳子的Windows 7,面对山狮,Win8毫无胜算。

当人们意识到Windows系统已不再是稳当的龙头老大,不再具备完全无法撼动的优势时,没有人能够预测到怎样的市场力量将会被释放出来。

Python for the Oracle DBA on Mac OS X Lion (1)

作为一个技术人员,不学习一门编程语言,人生是不完整的。
是Shell是Perl还是Python,哪个简单哪个好用,哪个更适合Oracle DBA,这不是本文的范围,俗话说,萝卜青菜,各有所爱。

Mac OS X中自带Python(实际上也自带Shell和Perl),在Lion之后,由于64bit Oracle客户端无法在Mac中正常运行,导致一系列的麻烦。在Python中连接Oracle数据库,通常是使用cx_Oracle扩展模块。如果是Windows或者CentOS/Redhat/OEL Linux可以直接在cx-oracle.sourceforge.net下载相应的安装文件,但是对于Mac而言,却必须下载源码,自行编译。需要解决64bit问题和Oracle Instant Client配置问题。

文本大部分内容参考Andy Chan的Tutorial: How to Install Python Oracle Module “cx_Oracle” on Mac OS X Lion

在作一切操作之前,请先确认已经安装了XCode,并且安装了Command Line Tools,否则会在最后编译安装cx_Oracle的时候报错:unable to execute llvm-gcc-4.2: No such file or directory

1. 安装Oracle Instant Client,由于众所周知的64bit客户端在Mac OS X Lion中回发生“Segmentation fault: 11”的错误,因此必须下载32bit版本。
编译cx_Oracle需要下载如下图的两个安装文件,不过实际上我是除了Basic Lite之外都下载安装了。具体安装步骤及其它设置可以参看之前我的文章:How to use Oracle Instant Client in Mac OS X Lion

2. Oracle Instant Client的安装实际上就是解压,然后将生成的目录放在$PATH环境变量中,我将解压后的目录放在:/Applications/Utilities/instantclient,目录中的内容如下:

bogon:instantclient Kamus$ ls -l
total 204152
-rw-r--r--@  1 Kamus  staff       278 Apr  1  2009 BASIC_README
-rw-r--r--@  1 Kamus  staff       276 Apr  1  2009 JDBC_README
-rw-r--r--@  1 Kamus  staff       282 Apr  1  2009 SQLPLUS_README
drwxr-xr-x   3 Kamus  admin       102 Aug  9  2011 bin
-rw-r--r--@  1 Kamus  staff   1609607 Feb  2  2008 classes12.jar
-rwxr-xr-x@  1 Kamus  staff     30556 Apr  1  2009 genezi
-rwxr-xr-x@  1 Kamus  staff      1555 Aug  9  2011 glogin.sql
drwxr-xr-x  13 Kamus  admin       442 Jul 22 01:38 lib
lrwxr-xr-x   1 Kamus  admin        20 Jul 22 01:38 libclntsh.dylib -> libclntsh.dylib.10.1
-rwxr-xr-x@  1 Kamus  staff  21537536 Mar 31  2009 libclntsh.dylib.10.1
-rwxr-xr-x@  1 Kamus  staff     31788 Mar 25  2009 libheteroxa10.dylib
-rwxr-xr-x@  1 Kamus  staff     31788 Mar 25  2009 libheteroxa10.jnilib
-rwxr-xr-x@  1 Kamus  staff   1683924 Feb 11  2009 libnnz10.dylib
-rwxr-xr-x@  1 Kamus  staff   1142284 Feb 11  2009 libocci.dylib.10.1
-rwxr-xr-x@  1 Kamus  staff  72626824 Apr  1  2009 libociei.dylib
-rwxr-xr-x@  1 Kamus  staff    106184 Mar 25  2009 libocijdbc10.dylib
-rwxr-xr-x@  1 Kamus  staff    106184 Mar 25  2009 libocijdbc10.jnilib
-rwxr-xr-x@  1 Kamus  staff    933744 Mar 25  2009 libsqlplus.dylib
-rwxr-xr-x@  1 Kamus  staff   1442316 Feb 11  2009 libsqlplusic.dylib
drwxr-xr-x   3 Kamus  admin       102 Jul 30  2011 network
-rw-r--r--@  1 Kamus  staff   1555682 Feb  2  2008 ojdbc14.jar
-rw-r--r--@  1 Kamus  staff   1646178 Jan 23  2008 orai18n.jar
drwxr-xr-x@  7 Kamus  admin       238 Apr  1  2009 sdk
drwxr-xr-x   3 Kamus  admin       102 Aug  9  2011 sqlplus

其中需要注意的是:
1) libclntsh.dylib是需要手工创建的链接。

ln -s libclntsh.dylib.10.1 libclntsh.dylib

2) lib目录,在默认解压以后,没有该目录,需要手工创建,然后将所有lib*复制到该目录中。否则在安装cx_Oracle的时候会报错:无法找到正确的ORACLE_HOME。我的lib目录中文件列表如下:

bogon:instantclient Kamus$ ls -l lib
total 194656
lrwxr-xr-x  1 Kamus  admin        20 Jul 22 01:38 libclntsh.dylib -> libclntsh.dylib.10.1
-rwxr-xr-x@ 1 Kamus  admin  21537536 Jul 22 01:36 libclntsh.dylib.10.1
-rwxr-xr-x@ 1 Kamus  admin     31788 Jul 22 01:36 libheteroxa10.dylib
-rwxr-xr-x@ 1 Kamus  admin     31788 Jul 22 01:36 libheteroxa10.jnilib
-rwxr-xr-x@ 1 Kamus  admin   1683924 Jul 22 01:36 libnnz10.dylib
-rwxr-xr-x@ 1 Kamus  admin   1142284 Jul 22 01:36 libocci.dylib.10.1
-rwxr-xr-x@ 1 Kamus  admin  72626824 Jul 22 01:36 libociei.dylib
-rwxr-xr-x@ 1 Kamus  admin    106184 Jul 22 01:36 libocijdbc10.dylib
-rwxr-xr-x@ 1 Kamus  admin    106184 Jul 22 01:36 libocijdbc10.jnilib
-rwxr-xr-x@ 1 Kamus  admin    933744 Jul 22 01:36 libsqlplus.dylib
-rwxr-xr-x@ 1 Kamus  admin   1442316 Jul 22 01:36 libsqlplusic.dylib

3. 修改环境变量,将以下行添加到~/.bash_profile文件中。

export ORACLE_HOME=/Applications/Utilities/instantclient
export LD_LIBRARY_PATH=$ORACLE_HOME
export DYLD_LIBRARY_PATH=$ORACLE_HOME
export SQLPATH=$ORACLE_HOME
export PATH=$PATH:$ORACLE_HOME/bin
#for cx_Oracle,这是必须的,强制Python使用32位版本
export VERSIONER_PYTHON_PREFER_32_BIT=yes 

4. 启动新的Terminal窗口,先安装pip,pip是Python的包管理软件,使用pip可以方便地从网络上直接安装需要的Python模块。

sudo easy_install pip

5. 安装cx_Oracle

sudo pip install cx_Oracle

安装过程中产生的类似如下这些警告,可以忽略:

/Applications/Utilities/instantclient/sdk/include/nzt.h:2746: warning: function declaration isn’t a prototype
......
Connection.c:283: warning: implicit conversion shortens 64-bit value into a 32-bit value
......

最终显示如下信息表示安装成功:

Successfully installed cx-Oracle

6. 最后测试一下cx_Oracle是否工作正常。具体语法参看:cx_Oracle 5.1.2 documentation

bogon:~ Kamus$ python
Python 2.7.1 (r271:86832, Aug  5 2011, 03:30:24) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from cx_Oracle import connect
>>> conn=connect('kamus/oracle@www.enmotech.com:1521/orcl')
>>> curs = conn.cursor()
>>> curs.execute("select * from v$version")
<__builtin__.OracleCursor on >
>>> rows = curs.fetchall()
##以下报错是Python语法对于强制代码缩进的体现,如果for循环中的语句开头没有缩进,则会报错。
>>> for i in range(len(rows)):
... print rows[i][0]
  File "", line 2
    print rows[i][0]
        ^
IndentationError: expected an indented block 
##在print前增加两个空格即可
>>> for i in range(len(rows)):
...   print rows[i][0]
... 
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE	11.2.0.3.0	Production
TNS for Solaris: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production

How to Install apk to Android Devices from Mac OS X

在Mac OS X中我们可以使用Android SDK直接将下载到电脑中的apk文件安装到Android设备中。

1. 下载Android SDK,可以从Android Developers网站直接下载,也可以通过MacPorts安装。我采取后一种方式。

$ sudo port install android
Password:
--->  Fetching archive for android
--->  Attempting to fetch android-16_0.darwin_11.x86_64.tbz2 from http://packages.macports.org/android
--->  Fetching android
--->  Attempting to fetch android-sdk_r16-macosx.zip from http://dl.google.com/android
--->  Attempting to fetch android-appbundles-r89422.tar.gz from http://distfiles.macports.org/android
--->  Verifying checksum(s) for android
--->  Extracting android
--->  Configuring android
--->  Building android
--->  Staging android into destroot
--->  Installing android @16_0
--->  Activating android @16_0
--->  Cleaning android

然后通过port contents命令可以获知Android SDK的安装路径。在我的机器上是/opt/local/share/java/android-sdk-mac_x86。

$ port contents android
Port android contains:
  /Applications/MacPorts/Developer/.localized
  ......
  /opt/local/share/java/android-sdk-mac_x86/tools/adb_has_moved.txt
  /opt/local/share/java/android-sdk-mac_x86/tools/android
  ......

默认安装的Android SDK是没有adb命令(该命令用于安装apk程序)的,需要运行Android SDK and AVD Manager来进行额外的下载安装。

2. 安装SDK Platform-tools

cd /opt/local/share/java/android-sdk-mac_x86/tools
sudo ./android

会显示以下界面,在第一次运行的时候,Android SDK Platform-tools的状态是未安装的,因此我们需要选中该组件,然后点击右下方的“Install packages”按钮。而此处的截图是安装完毕以后的情况。

3. 安装apk软件,当然,这里先要用数据线将Android设备连接到Mac电脑上。

##adb命令是安装到platform-tools目录中,而非上一步android命令所在的tools目录。
$ cd /opt/local/share/java/android-sdk-mac_x86/platform-tools
##先探测是否可以正确识别设备,有设备号和device字样表示正确识别。
$ ./adb devices
List of devices attached 
01839c14	device
##安装apk软件,本例中安装的是高德移动导航
$ ./adb install /tmp/Autonavi_v1.2.apk
3225 KB/s (4027409 bytes in 1.219s)
	pkg: /data/local/tmp/Autonavi_v1.2.apk
Success

How to Use Port in Mac OS X to Install New Utilities

假设我们想要在Mac OS X中安装:
MySQL,这是一个开源的免费的数据库,当然备Oracle收购之后有一些变化。
postgreSQL,这又是另外一个开源的免费的数据库。
perl,这是一种流行的编程语言。
lua,这又是另外一种流行的编程语言。
watch,这是一个实用程序,可以默认每隔2秒重复执行某条命令,比如你想监控一个目录下的文件生成情况,这条命令就很有用。
tree,这是一个实用程序,可以提供类似于ls -R的功能,但是输出是更加直观的树状结构。

当然,我们可以在网络中一个一个地找这些程序,然后一个一个地安装,用不同的安装方法,但是,你也可以选择非常简单的方法,这就是本文要介绍的MacPorts。

在Linux中如果我们要安装一些软件,要解决各个软件之间的包依赖性关系,我们会使用到apt-get(Ubuntu)或者yum(Redhat,CentOS)或者zypper(openSUSE),如果你熟悉一些Linux的话,对于这些软件包管理程序应该有所耳闻。而MacPorts正是在Mac OS X上的软件包管理程序。

安装MacPorts最简单的方法是直接下载dmg文件,双击安装 - Lion版安装文件 | Snow Leopard版安装文件

MacPorts安装完以后,我们就可以通过命令行的方式来安装其它软件了,可以参看具体命令文档。以下列出常用的命令:

1. 更新本地软件库列表,该命令可以不定时多次执行(sudo以后需要输入密码,输入你自己用户的密码即可)。

sudo port selfupdate

2. 列出软件库中有哪些软件,注意,该命令会输出大量软件名称,因此建议添加more来查看,或者使用后面的search命令。

port list | more

3. 检索需要安装的软件。

port search 

当然,还有更精确地搜索,比如如果直接port search tree会出现上百个结果,但是如果执行以下命令,就只会出现一个结果。

$ port search --name --exact tree
tree @1.6.0 (sysutils)
    display tree-view of directories with optional color/HTML output

4. 列出已经通过port安装的软件。

port installed

5. 安装软件,一些具有依赖性的软件会连带自动安装,比如安装LUA,会安装ncurses和readline。

sudo port install 

6. 卸载软件。

sudo port uninstall 

7. 清理未成功安装的软件,比如一些软件由于编译问题或者其它原因没有安装成功。

sudo port clean --all 

8. 查看安装的软件都安装了哪些内容。

port contents 

比如查看tree都安装了哪些内容。

$ port contents tree
Port tree contains:
  /opt/local/bin/tree
  /opt/local/share/doc/tree/CHANGES
  /opt/local/share/doc/tree/LICENSE
  /opt/local/share/doc/tree/README
  /opt/local/share/man/man1/tree.1.gz

9. 升级当前安装过的软件。

sudo port upgrade 

升级全部有新版本的软件。升级以后将会保留以前的旧版本,只是将旧版本设置为Inactive。

sudo port upgrade outdated

当确认新版本软件工作正常以后,可以通过以下命令删除所有旧版本软件。

sudo port uninstall inactive

或者通过以下命令,删除指定的旧版本软件。

sudo port uninstall makedepend @1.0.2_0

如果想在升级的时候就直接删除旧版本软件,可以在upgrade时使用-u参数。

sudo port -u upgrade 

10. Troubleshooting
由于MacPorts与Xcode联系紧密,因此如果在升级完操作系统(比如从10.8升级到10.9),可能之前运行正常的MacPorts就无法使用了,比如出现以下报错。

localhost:~ Kamus$ sudo port selfupdate

WARNING: Improper use of the sudo command could lead to data loss
or the deletion of important system files. Please double-check your
typing when using sudo. Type "man sudo" for more information.

To proceed, enter your password, or type Ctrl-C to abort.

Password:
--->  Updating MacPorts base sources using rsync
MacPorts base version 2.1.2 installed,
MacPorts base version 2.2.1 downloaded.
--->  Updating the ports tree
--->  MacPorts base is outdated, installing new version 2.2.1
Installing new MacPorts release in /opt/local as root:admin; permissions 0755; Tcl-Package in /Library/Tcl

Error: /opt/local/bin/port: port selfupdate failed: Error installing new MacPorts base: command execution failed
localhost:~ Kamus$ sudo port selfupdate
--->  Updating MacPorts base sources using rsync
MacPorts base version 2.1.2 installed,
MacPorts base version 2.2.1 downloaded.
--->  Updating the ports tree
--->  MacPorts base is outdated, installing new version 2.2.1
Installing new MacPorts release in /opt/local as root:admin; permissions 0755; Tcl-Package in /Library/Tcl

Error: /opt/local/bin/port: port selfupdate failed: Error installing new MacPorts base: command execution failed

解决方法是将Xcode的Command Line Tools再安装一遍,通过以下方法。

$ sudo xcode-select --install

然后再运行port命令就功能正常了。

localhost:~ Kamus$ sudo port selfupdate
--->  Updating MacPorts base sources using rsync
MacPorts base version 2.1.2 installed,
MacPorts base version 2.2.1 downloaded.
--->  Updating the ports tree
--->  MacPorts base is outdated, installing new version 2.2.1
Installing new MacPorts release in /opt/local as root:admin; permissions 0755; Tcl-Package in /Library/Tcl


The ports tree has been updated. To upgrade your installed ports, you should run
  port upgrade outdated

How to set Safari to use PAC file in Mac OS X Lion

目标
通过设置Safari的自动proxy切换,实现浏览网页的时候,如果是GFW的站点则自动通过Proxy,如果不是,则不使用Proxy。这样保证浏览国内网站时候速度够快,而浏览GFW的网站也没有问题,全自动,无需手工干预。

操作系统和浏览器
Mac OS X Lion + Safari 5.1(当然低版本的Safari也同样可以这样设置)。如果浏览器是Firefox,可以直接用autoproxy插件,如果浏览器是Chrome,可以用Switchy!插件。

需要下载的软件
1. SSH Tunnel Manager,在Mac App Store中搜索安装即可。
要使用该软件,首先要求有一个可以通过ssh访问的国外虚拟主机,通常有这样主机的,大概也都知道该如何设置ssh端口转发了,所以不再赘述,要注意的是,监听的端口可以随便设置,我设置为7080。如果使用本文中的pac文件,那么也必须要设置为7080。

2. autoproxy.pac脚本,该脚本可以从AutoProxy2PAC站点下载。很可惜,这个站点本身需要翻墙,不过我已经将我自己用的pac文件放在这里,可以下载使用,在SSH Tunnel Manager中必须设置本地端口是7080。

启动SSH Tunnel Manager
连接设置好的ssh会话,检查本地端口是否已经被正常监听。注意最后两行末尾的LISTEN字样,表示已经监听在本地的7080端口上,这意味着任何通过socks代理发送到本地7080端口的请求,都会通过ssh转发到国外的虚拟主机,然后从国外访问GFWed的网站,再通过ssh返回请求的页面。基本上是这样的方式完成翻墙。

Kamus$ netstat -a|grep 7080
tcp4       0      0  localhost.7080         localhost.37233        ESTABLISHED
tcp4       0      0  localhost.37233        localhost.7080         ESTABLISHED
tcp4       0      0  localhost.7080         localhost.37232        ESTABLISHED
tcp4       0      0  localhost.37232        localhost.7080         ESTABLISHED
tcp4       0      0  localhost.7080         localhost.37231        ESTABLISHED
tcp4       0      0  localhost.37231        localhost.7080         ESTABLISHED
tcp4       0      0  localhost.7080         localhost.36407        ESTABLISHED
tcp4       0      0  localhost.36407        localhost.7080         ESTABLISHED
tcp4       0      0  localhost.7080         localhost.36187        FIN_WAIT_2 
tcp4      37      0  localhost.36187        localhost.7080         CLOSE_WAIT 
tcp4       0      0  localhost.7080         *.*                    LISTEN     
tcp6       0      0  localhost.7080         *.*                    LISTEN  

设置Safari
这是最重要的步骤。
1. 开启Mac OS X Lion中的Web Sharing,实际上就是启动本地的www服务器。如下图,在System Preferences中的Sharing页面里。

2. 将下载的proxy.pac文件复制到~/Sites目录下。

Kamus$ ls ~/Sites
images		index.html	proxy.pac

3. 修改Safari的代理配置,选择自动代理配置,如下图。这里要注意的是URL部分必须是http开头的路径,而不能是本地目录样式的路径,这也是为什么上面第一步要开启Web Sharing的原因。这个问题的解释参看:Proxy Pac files no longer work in Mac OS X Lion

保存以后,尝试登陆一下twitter.com,再尝试登陆一下weibo.com。好了,祝大家翻墙愉快。

How to delete photos from Photo Stream in iOS5

不管你相信不相信,目前你无法从iOS5的Photo Stream中删除单张照片,这似乎保持了Apple的一贯作风,简单粗暴,要么全部删除,要么等着存满1000张把以前的顶掉。

Photo Stream并不是一个同步机制,他仅仅是在Wifi可用的场景下进行照片的Push工作,比如你从iPhone的Camera Roll里面删除一张照片,这并不会影响已经push到Photo Stream中的照片,所以想靠这种方法来删除Photo Stream中的单张照片也是不可行的。

我们现在可以作的就是删除Photo Stream中的所有图片,但是我们上面提到了Photo Stream并不是同步的机制,因此假设你有两个设备,一个iPhone(运行着iOS5),一个Macbook(运行着Mac OS-X Lion 10.7.2以及iPhoto 9.2),并且还有网络上的iCloud.com,你需要手动在这三个地方都删除掉图片。

1. 删除iOS5中的Photo Stream图片
在Settings->iCloud->Photo Stream中,将选项设置为Off,会提示将删除所有Photo Stream中的图片,确认之后即可完成删除。

2. 删除iPhoto中的Photo Stream图片
在Preferences->Photo Stream中,将Enable Photo Stream前面的勾去掉,也会提示将删除所有Photo Stream中的图片,确认之后即可以完成删除。

3. 删除iCloud中的Photo Stream图片
登陆iCloud.com,点击右上角的用户名,点击Advanced,点击Reset Photo Stream,仍然会提示删除,确认完成。

How to Using VNC to Remote Control Linux from Mac OS X Lion

从Mac OS X中远程控制Linux非常简单,在Mac中无需安装任何软件,当然Linux端需要安装VNC服务。

环境概述:
Linux:Oracle Enterprise Linux 5.4
Mac:Mac OS X Lion(实际上Snow Leopard或者Leopard应该都是可以的)
VNC Server:Real VNC Free Edition

1. 在OEL中安装Real VNC Server

rpm -Uvh vnc-4_1_3-x86_linux.rpm

2. link X11字体文件位置,否则VNC启动会报错

# cd /usr/X11R6/lib
# ln -s /usr/share/X11 X11
# ls -l
total 4
lrwxrwxrwx 1 root root   14 Sep  5 18:10 X11 -> /usr/share/X11
drwxr-xr-x 3 root root 4096 Aug 31 15:46 modules

如果不执行以上命令,可能在启动VNC以后,在log文件中会看到如下报错:

Couldn't open RGB_DB '/usr/X11R6/lib/X11/rgb'

Fatal server error:
could not open default font 'fixed'
xsetroot:  unable to open display 'hpserver:1'
vncconfig: unable to open display "hpserver:1"
xterm Xt error: Can't open display: hpserver:1
twm:  unable to open display "hpserver:1"

2. 启动VNC,可以用任意用户启动VNC,建议不要使用root

$ vncserver

New 'hpserver:1 (kamus)' desktop is hpserver:1

Starting applications specified in /home/kamus/.vnc/xstartup
Log file is /home/kamus/.vnc/hpserver:1.log

3. 检查vnc log文件,确认vnc监听的端口

vi /home/kamus/.vnc/hpserver:1.log

可以在log文件中看到如下字样,这表示通过RFB协议访问VNC服务器应该指向5901,而通过http协议访问则指向5801。

vncext:      Listening for VNC connections on port 5901
vncext:      Listening for HTTP connections on port 5801

4. 确认VNC已经正常启动,注意在log文件中可能存在warning或者报错,我们通过检查端口来确认VNC是否正常启动。

# lsof|grep 5901|grep vnc
Xvnc      20656     kamus    3u     IPv4     206853                  TCP *:5901 (LISTEN)

如果上述命令,没有返回值,则表明VNC没有成功启动。

5. 用Mac连接VNC
Cmd+K快捷键或者Finder->Go->Connect to Server,打开如下界面,输入:vnc://server-ip:port,port就是上面第三步检查的通过RFB协议访问VNC服务器的端口,通常为590x。

但是默认启动的VNC界面是比较简陋的,如下图这样。当然,也完全可以使用。

6. 如果我们想在VNC中使用gnome界面,那么需要修改一下启动vnc的脚本。该脚本通常位于启动VNC的用户Home下的.vnc目录中,也就是跟log文件在一个目录下,文件名为xstartup。

$ vi ~/.vnc/xstartup

添加如下行。

unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc

修改完毕以后,整个xstartup脚本如下所示。

#!/bin/sh
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc

[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &

然后停止VNC,再重新启动。

$ vncserver -kill :1
Killing Xvnc process ID 21210
$ vncserver

New 'hpserver:1 (kamus)' desktop is hpserver:1

Starting applications specified in /home/kamus/.vnc/xstartup
Log file is /home/kamus/.vnc/hpserver:1.log

7. 再次从Mac中连接VNC,就可以看到美观的gnome界面了。

如何停止vncserver。

[orat0@hpserver2 ~]$ vncserver -list

TigerVNC server sessions:

X DISPLAY #	PROCESS ID
:1		701
[orat0@hpserver2 ~]$ 
[orat0@hpserver2 ~]$ 
[orat0@hpserver2 ~]$ vncserver -kill :1
Killing Xvnc process ID 701

参考文章:
How To Setup Linux VNC Server In 3 Minutes

How to use Oracle Instant Client in Mac OS X Lion

升级到Mac OS X Lion以后,原先在Snow Leopard下运行正常的Oracle 10.2.0.4 64bit将无法正常工作,无论执行什么命令(比如sqlplus或者lsnrctl)都会报如下错误。

$ sqlplus
Segmentation fault: 11

在OTN Forum中有此问题的讨论,但是目前为止还没有任何可用的解决方案。Oracle对于Mac的支持一向很弱,而OS X最近的这次升级一定是更改了很多库文件,导致64bit的Oracle数据库/64bit的Oracle Instant Client均无法在OS X Lion中正常运行。

对于Oracle数据库而言,只有for MAC OS X on Intel x86-64版本存在,但是对于Oracle Instant Client却有32bit版本下载,因此如果急于在Mac OS X Lion中使用sqlplus的,可以先安装32bit版本。

安装和设置方法:
1. 从以下链接下载Instant Client for Mac OS X。
http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html
下载Version 10.2.0.4 (32-bit) 中的:
instantclient-basic-10.2.0.4.0-macosx-x86.zip
instantclient-sqlplus-10.2.0.4.0-macosx-x86.zip

2. 将两个zip文件都解压到一个文件夹中,比如文件夹名为instantclient,我将此文件夹转移到到/Applications/Utilities/下,在你的环境中,任何路径都可以。

3. 修改Mac用户的环境变量,直接修改User Home下的.bash_profile文件,添加如下行,其中的路径替换为你环境中的instantclient路径。

export DYLD_LIBRARY_PATH=/Applications/Utilities/instantclient/
export ORACLE_HOME=/Applications/Utilities/instantclient/
export SQLPATH=$ORACLE_HOME
export PATH=$PATH:/Applications/Utilities/instantclient/:.

4. 手动创建tns_admin目录,以及tnsnames.ora文件,其中的内容自己写。

mkdir -p $ORACLE_HOME/network/admin
vi $ORACLE_HOME/network/admin/tnsnames.ora

在我的环境中,用instantclient连接VirtualBox中的11gR2数据库。

localhost:~ Kamus$ sqlplus kamus@vbox-orcl-oel5

SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jul 30 12:09:35 2011

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Enter password: 

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, Automatic Storage Management, Oracle Label Security and Real Application Testing options

SQL> 

备注:关于glogin.sql
默认解压完的instantclient-sqlplus-10.2.0.4.0-macosx-x86.zip是不包含目录结构的,因此glogin.sql在sqlplus执行的时候无法被正确调用,导致的结果就是比如show parameter命令的格式非常难看。因此需要手动做如下操作:
1. 创建bin目录,将sqlplus可执行文件mv到该目录中
2. 创建sqlplus/admin目录,将glogin.sql文件mv到该目录中
3. 修改用户.bash_profile文件,将instantclient/bin添加到PATH环境变量中