MGJ的地盘

爱拼才会赢!

Xming简易教程 185

作者为 发表

Xming 簡易使用說明官方網頁下載

一、原理

Linux/Unix的X Window具有网络透明性。X Window系统里有一个统一的Server来负责各个程序与显示器、键盘和鼠标等输入输出设备的交互,每个有GUI的应用程序都通过网络协议与Server进行交互。所以对于任何一个应用程序,本地运行和远程运行的差别仅仅是X Server的地址不同,别的没有差别。所以在Windows运行一个X Server,就可以很方便的远程运行有GUI的Linux应用了。同时,OpenSSH具有X转发功能,可以将Linux主机的X程序通过SSH的管道转发给客户端。于是,通过PuTTY到主机,再将接收到的由主机转发来的X程序的交互交给在本地Windows系统下运行的X Server来管理和显示,原则上说,这就可以实现远程使用Linux的GUI程序。

主机上需要的配置:

#vi /etc/ssh/sshd_config

取消这一行的注释——如果没有这一行则手动添加之:

X11Forwrding yes

这样配置的作用就是允许SSH的X转发。其实本质上说,这样做是有一定安全风险的,SSH并不能绝对的保证你数据的安全性,不过,一般情况下,这也够了。

二、安装Xming

需要在本地Windows上运行一个X Server。选择有很多:Cygwin下的X Server恐怕是最著名的,但是为了这么一个小小的事情去安装一个“相对巨大”的Cygwin,似乎有些夸张;除了Cygwin,还有两个著名的商业软件可以选用,Xwin32和Xmanager,上学期IC实验用的就是Xmanager,感觉很流畅很好用,不过,虽然Xmanager可以试用,但是终究还是商业软件;还有一个选择,就是这里要讲的,开源软件Xming。

Xming是一个配置简单而功能强大的开源X Server,可以运行在M$的XP/2003/Vista操作系统下。

Xming的主页:http://www.straightrunning.com/XmingNotes/

Xming的SourceForge页面:http://sourceforge.net/projects/xming/

从SourceForge下载Xming-setup.exe(最新的版本是6.9.0.31),在本地安装。

第一次运行时使用开始菜单里面的XLaunch来启动,产生一个初始的配置文件。对于简单的使用来说,不需要任何特殊的配置,一切使用默认即可。Xming的具体配置和使用可以参考Xming的Manual

首先打開 XLaunch

Xming简易教程 - 强者恒强 - 今天要比昨天更强

開啟後畫面如下,可以不改任何設定一直按下一步到底

Xming简易教程 - 强者恒强 - 今天要比昨天更强

按完結束後 Xming 會啟動在右下角

Xming简易教程 - 强者恒强 - 今天要比昨天更强

接著用 PuTTy 登入工作站,登入前先設好 X11 forwarding

Xming简易教程 - 强者恒强 - 今天要比昨天更强

注意 localhost:後面的數字是 XLaunch 第一個畫面設的 Display number

當然也可以在 XLaunch 中直接呼叫 PuTTy 啦,還有很多設定可以自行摸索?

現在在工作站執行 GUI 程式,就會出現在你的 Windows 桌面上啦!Xming简易教程 - 强者恒强 - 今天要比昨天更强

UTF-8编码与解码 C++版 216

作者为 发表

//utf8字符转码
#include <string>
using namespace std;

string ws2s(const wstring& ws)
{
	string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C";
	setlocale(LC_ALL, "chs"); 
	const wchar_t* _Source = ws.c_str();
	size_t _Dsize = 2 * ws.size() + 1;
	char *_Dest = new char[_Dsize];
	memset(_Dest,0,_Dsize);
	wcstombs(_Dest,_Source,_Dsize);
	string result = _Dest;
	delete []_Dest;
	setlocale(LC_ALL, curLocale.c_str());
	return result;
}
 

wstring s2ws(const string& s)
{
	setlocale(LC_ALL, "chs"); 
	const char* _Source = s.c_str();
	size_t _Dsize = s.size() + 1;
	wchar_t *_Dest = new wchar_t[_Dsize];
	wmemset(_Dest, 0, _Dsize);
	int nret = mbstowcs(_Dest,_Source,_Dsize);
	wstring result = _Dest;
	delete []_Dest;
	setlocale(LC_ALL, "C");
 
	return result;

}


 
wstring UTF2Uni(const char* src, std::wstring &t)
{
	if (src == NULL) 
	{
		return L"";
	}
	
	int size_s = strlen(src);
	int size_d = size_s + 10;          //?
	
	wchar_t *des = new wchar_t[size_d];
	memset(des, 0, size_d * sizeof(wchar_t));
	
	int s = 0, d = 0;
	bool toomuchbyte = true; //set true to skip error prefix.
	
	while (s < size_s && d < size_d)
	{
		unsigned char c = src[s];
		if ((c & 0x80) == 0) 
		{
			des[d++] += src[s++];
		} 
		else if((c & 0xE0) == 0xC0)  ///< 110x-xxxx 10xx-xxxx
		{
			wchar_t *wideChar = &des[d++];
			*wideChar  = (src[s + 0] & 0x3F) << 6;
			*wideChar |= (src[s + 1] & 0x3F);
			
			s += 2;
		}
		else if((c & 0xF0) == 0xE0)  ///< 1110-xxxx 10xx-xxxx 10xx-xxxx
		{
			wchar_t *wideChar = &des[d++];
			
			*wideChar  = (src[s + 0] & 0x1F) << 12;
			*wideChar |= (src[s + 1] & 0x3F) << 6;
			*wideChar |= (src[s + 2] & 0x3F);
			
			s += 3;
		} 
		else if((c & 0xF8) == 0xF0)  ///< 1111-0xxx 10xx-xxxx 10xx-xxxx 10xx-xxxx 
		{
			wchar_t *wideChar = &des[d++];
			
			*wideChar  = (src[s + 0] & 0x0F) << 18;
			*wideChar  = (src[s + 1] & 0x3F) << 12;
			*wideChar |= (src[s + 2] & 0x3F) << 6;
			*wideChar |= (src[s + 3] & 0x3F);
			
			s += 4;
		} 
		else 
		{
			wchar_t *wideChar = &des[d++]; ///< 1111-10xx 10xx-xxxx 10xx-xxxx 10xx-xxxx 10xx-xxxx 
			
			*wideChar  = (src[s + 0] & 0x07) << 24;
			*wideChar  = (src[s + 1] & 0x3F) << 18;
			*wideChar  = (src[s + 2] & 0x3F) << 12;
			*wideChar |= (src[s + 3] & 0x3F) << 6;
			*wideChar |= (src[s + 4] & 0x3F);
			
			s += 5;
		}
	}
	
	t = des;
	delete[] des;
	des = NULL;
	
	return t;
}



int Uni2UTF( const wstring& strRes, char *utf8, int nMaxSize )
{
	if (utf8 == NULL) {
		return -1;
	}
	int len = 0;
	int size_d = nMaxSize;


	for (wstring::const_iterator it = strRes.begin(); it != strRes.end(); ++it)
	{
		wchar_t wchar = *it;
		if (wchar < 0x80)
		{  //
			//length = 1;
			utf8[len++] = (char)wchar;
		}
		else if(wchar < 0x800)
		{
			//length = 2;
			
			if (len + 1 >= size_d)
				return -1;
			
			utf8[len++] = 0xc0 | ( wchar >> 6 );
			utf8[len++] = 0x80 | ( wchar & 0x3f );
		}
		else if(wchar < 0x10000 )
		{
			//length = 3;
			if (len + 2 >= size_d)
				return -1;
			
			utf8[len++] = 0xe0 | ( wchar >> 12 );
			utf8[len++] = 0x80 | ( (wchar >> 6) & 0x3f );
			utf8[len++] = 0x80 | ( wchar & 0x3f );
		}
		else if( wchar < 0x200000 ) 
		{
			//length = 4;
			if (len + 3 >= size_d)
				return -1;
			
			utf8[len++] = 0xf0 | ( (int)wchar >> 18 );
			utf8[len++] = 0x80 | ( (wchar >> 12) & 0x3f );
			utf8[len++] = 0x80 | ( (wchar >> 6) & 0x3f );
			utf8[len++] = 0x80 | ( wchar & 0x3f );
		}
	
	}
	

	return len;
}

string s2utfs(const  string&  strSrc)
{
	string  strRes;
	wstring  wstrUni = s2ws(strSrc);
	
	char*  chUTF8 = new char[wstrUni.length() * 3];
	memset(chUTF8,0x00,wstrUni.length() * 3);
	Uni2UTF(wstrUni,chUTF8, wstrUni.length() * 3);
	strRes = chUTF8;	
	delete  []chUTF8;
	return strRes;
}


string  utfs2s(const string& strutf)
{
	wstring  wStrTmp;
	UTF2Uni( strutf.c_str(),wStrTmp);
	return ws2s(wStrTmp);
}

今天一个点击,将Hotmail升级到Outlook了,页面非常简洁,如果与Win8相结合的话会相当合适。可是想要返回Hotmail界面确实不可能了,想不到Hotmail就这样没落了,难道是Hotmail时代的终结吗?

 

QQ截图20130313195232



 主题设计 • skyfrit.com  MGJ的地盘 | 保留所有权利

37 queries in 0.512 seconds.