오늘은 FreeNX 서버를 구축하는 방법에 대해서 살펴보겠습니다.

ssh나 samba와 같이 원격접속할 수 있는 시스템을 만드는 하나의 방법으로 FreeNX 를 사용할 수 있습니다.


FreeNX 를 사용하는 형태는

윈도우(클라이언트)에서 GUI 형태의 프로그램으로

리눅스(서버)에 원격접속하는 형태가 많더라고요.


저는 리눅스에서 FreeNX 서버를 구축하는 방법을 소개해드리려고 합니다.


실은, 정말 쉬워요. 다음의 명령어를 그냥 쭉 입력하세요.


$ sudo apt-get install -y openssh-server python-software-properties \gnome-session-fallback
$ sudo add-apt-repository -y ppa:freenx-team
$ sudo apt-get update
$ sudo apt-get install -y freenx freenx-server 
$ wget https://bugs.launchpad.net/freenx-server/+bug/576359/+attachment/1378450/+files/nxsetup.tar.gz
$ tar -xvf nxsetup.tar.gz
$ sudo cp nxsetup /usr/lib/nx/nxsetup
$ sudo /usr/lib/nx/nxsetup –install

이렇게 하면 설치가 완료 된 것인데요.마지막에 이런 질문이 올겁니다.

"Do you want to use your own custom KeyPair?"

대답을 Y를 하면 key를 생성해서 받게 됩니다. 그 Key를 확인하고 싶다면 다음 명령어를 입력하시면 됩니다!

$ sudo cat /var/lib/nxserver/home/.ssh/client.id_dsa.key


'컴퓨터 프로그래밍' 카테고리의 다른 글

HBE-MCU-All in One 소개  (0) 2013.09.24
알고리즘 - 내림차순 삽입정렬  (0) 2013.09.23
ACPI 란 무엇인가?  (1) 2013.09.14
네임스페이스(namespace) 란?  (3) 2013.09.09
SAMBA 구축하기  (0) 2013.09.07

노트북 개인 PC 자주 사용하시다 보면 ACPI 라는 단어를 몇번 보실 때가 있어요.

오늘은 그 'ACPI'라는 놈이 무엇인지에 대해서 설명을 드리도록 하겠습니다.


ACPI는 Adavanced Configuration and Power Interface입니다.

쉽게 말해서 '고급전원관리'정도로 말할 수 있습니다.


ACPI에 대해서 알아보기 전에 시스템 상태에 대해서 설명을 먼저 드리겠습니다.

일반적인 시스템 상태(Global System States, GSS)에는 크게 4가지가 있습니다.

바로 G3, G2, G1, G0 입니다.

1. G3 - 전원 차단 상태를 의미합니다. ( Mechanical Off State )

전원 플러그 연결이 되어있지 않은 상태로, 배터리로만 전원을 단독 공급하고 있는 상태를 의미합니다.

2. G2(S5) - 전원 연결 상태( Sort Off )

전원이 연결된 상태를 의미합니다. 5V Standby와 배터리 전원이 공급되는 상태를 의미합니다.

3. G1 - 수면 상태( Sleeping State )

4. G0(S0) - 가동 상태( Working States )



ACPI는 미국의 인텔과 마이크로소프트가 공동으로 프로젝트를 진행하여 만든 인터페이스입니다.

아까 말씀드린 것처럼 '고급전원관리'로 이해를 하셔도 되고, 전력 제어를 위한 응용 프로그램 인터페이스(API) 규격으로

 '고급 구성 및 파워 인터페이스'으로 이해를 하셔도 무방합니다.

기존에는 APM이라는 것으로 전원관리를 하고 있었는데, 이를 대체할 새로운 전력 제어용 API로서 개발되었습니다.

ACPI는 윈도우 98과 윈도우 NT 5.0에서 처음으로 탑재되었습니다.


기존의 APM은 기본 입출력 체계(BIOS)와 운영 체제(OS) 사이의 인터페이스만을 규정한 것으로, 

전력 제어를 기본적으로 BIOS가 하는 반면에,

ACPI는 OS가 중심이 되어서 각 장치의 동작 상태등을 일괄적으로 관리하고 전력을 제어하는 인터페이스인 것입니다.


ACPI가 사용되면서 PC 전체 시스템과 PC에 연결되어 있는 모든 주변 장치의 전력 소비를 통합적으로 관리할 수 있게 됩니다.

ACPI는 통합 전력 인터페이스로서의 역할을 하며 전기를 장시간 사용해야 하는 컴퓨터에서 매우 유용하게 사용될 수 있습니다.


또, ACPI의 도입으로부터 윈도우 98 운영 체제를 5초 이내로 가동할 수 있는 온나우 기능도 실현가능해졌습니다.


'컴퓨터 프로그래밍' 카테고리의 다른 글

알고리즘 - 내림차순 삽입정렬  (0) 2013.09.23
FreeNX 서버 구축하기  (0) 2013.09.14
네임스페이스(namespace) 란?  (3) 2013.09.09
SAMBA 구축하기  (0) 2013.09.07
user ID 생성 및 sudo 권한 부여  (0) 2013.09.07

Namespaces In C++

사진 출처: www.SoftwareTestingHelp.com



네임스페이스(namespace)란 무엇인가?


네임스페이스가 뭔지 알기 전에 아주 간단한 Hello World 예제를 살펴봅시다.

C++에서 Hello World 를 찍어내려면

 

#include <iostream>
using namespace std;

int main(void)
{
	cout << "Hello World! C++" << endl;
	return 0;
} 

 

와 같이 입력하면 됩니다.

C를 미리 공부하셨다면, C에서의 HelloWorld 예제랑 차이점을 몇가지 찾아낼 수 있을 것이고 이런 질문을 하겠죠..

 

※ 일단, 헤더파일부터 다르네요. => 그거야 사용하는 함수가 다르니까 헤더파일이 다른 것이겠죠? 

C 언어에서는 printf 함수를 사용했다면, C++ 에서는 cout이라는 함수를 사용합니다. 

cout 함수를 사용하기 위해 "iostream"(input/output stream 이라는 뜻입니다.) 헤더파일을 인용한 것입니다.

 

※ 엥? 그렇다면 using namespace std; 는 뭐죠? 처음 보는 건데?

=> 이 질문을 받기 위해서 제가 Hello World 예제를 먼저 해보자고 한 겁니다.

using namespace std; 이거 그냥 그대로 읽어봅시다. "std라는 네임스페이스를 사용하며..."라고 해석됩니까?

그렇습니다. 이 문장은 우리가 std라는 네임스페이스를 사용할 수 있게 해줍니다.

여기서 std는 많이 본 약자죠? 그렇습니다. standard의 약자입니다. 

즉, 

using namespace std; // 이 문장은 표준 네임스페이스를 사용하겠다는 의미입니다.

 

 

자 이제, 네임스페이스가 뭔지 알아보죠. 

using namespace 선언은 말 그대로 소속을 알리는 역할을 합니다. 그러니까 네임스페이스는 변수 이름이나 함수 이름과 같이 명칭을 사용하는 공간으로 소속을 나타낸다고 표현할 수 있습니다. 예를 들어, 영희네 강아지도 멍멍이이고, 철수네 강아지도 멍멍이에요. 둘이 어떻게 구분하죠? 둘 다 멍멍이면 구별 안되죠? 우리는 구별하기 위해서 영희네 멍멍이, 철수네 멍멍이라고 언급할 수 있습니다. 여기서 영희, 철수라고 하는 '소속'을 네임스페이스라고 생각하면 됩니다.

 

 네임스페이스는? 소속! 

 

namespace는 다음과 같은 형태로 사용되어집니다.

 

namespace 이름
{ 
	선언내용;
}


자, 이제 바로 네임스페이스 예제를 들여다 봅시다.

 

#include <iostream>
namespace A_RANGE
{
	int score = 100;
	int FUNC(int s)
	{
		return s/5;
	}
}
  
namespace B_RANGE
{
	int score = 200;
	int FUNC(int s)
	{
		return s/10;
	}
}
  
using namespace std;
using namespace A_RANGE;
using namespace B_RANGE;
  
int main()
{
	int score = 300;
  
	cout << "main score : " << score << endl;
	cout << "standard score : " << std::score << endl;
	cout << "A_RANGE score : " << A_RANGE::score << endl;
	cout << "B_RANGE score : " << B_RANGE::score << endl;
  
	return 0;
}

 

예제의 결과값은 300 300 100 200 입니다.

예제를 자세히 보시면 또 알 수 있다시피 네임스페이스의 변수 및 함수의 사용은


[namespace]::[변수 혹은 함수]


의 꼴로 사용됩니다.

FUNC를 메인 함수에서 사용하지 않았는데, 이 부분은 여러분이 유연하게 예제를 고쳐가면서 직접 사용해보세요.

함수를 사용하는 것은 변수 사용하는 것과 동일합니다.

 

이 예제를 통해서 얻어가야 할 것은 네임스페이스라는 소속 공간에 따라서 변수나 함수가 같은 이름임에도

다른 식으로 구분이 될 수 있다는 것을 아셔야 합니다. 

 

그리고 네임스페이스 안에도 함수가 들어가죠. 마치, 하나의 객체 같지 않나요? 

C++ 도 객체지향언어(OOP)입니다. 즉, 네임스페이스가 C++에서의 하나의 객체 단위가 된다고 생각할 수도 있곘습니다! :)

 

 

 

여기까지, 네임스페이스에 대한 간단한 정의 및 설명이었습니다. 

감사합니다.

 

'컴퓨터 프로그래밍' 카테고리의 다른 글

FreeNX 서버 구축하기  (0) 2013.09.14
ACPI 란 무엇인가?  (1) 2013.09.14
SAMBA 구축하기  (0) 2013.09.07
user ID 생성 및 sudo 권한 부여  (0) 2013.09.07
세마포어(semaphore) 란 무엇인가?  (0) 2013.09.07

2. SAMBA란 무엇인가?

삼바는 SMB 프로토콜을 유닉스 컴퓨터에 구현한 프리웨어로서, 원래 국립 호주대학의 앤드루 트리젤이 유닉스용으로 개발하였다. 

이것은 윈도우 클라이언트에서 유닉스 서버에 있는 파일들이나 프린터를 공유할 수 있게 해준다. 

예를 들면, 유닉스 서버에 있는 파일을 편집하기 위하여 텔넷으로 접속하는 대신에, 

윈도우95/98 사용자가 윈도우 익스플로러 내에 있는 드라이브에 연결함으로써 유닉스 컴퓨터 상의 삼바 서버에 접속한 후, 

윈도우용 에디터를 이용하여 그 파일을 편집할 수 있다.


무슨 말인지 모르겠죠...ㅎ

ssh는 '설치'한다고 했는데 samba는 '구축'한다고 할거에요.

왜냐하면 samba는 윈도우 운영체제에서 유닉스 컴퓨터에 접근할 때 사용하는 프로그램이거든요.

우리는 지금 리눅스 우분투를 기반으로 하고 있잖습니까? 즉 우리가 서버 역할을 하는 입장인 거에요.

따라서, 우리한테는 samba를 구축한다고 하는게 더 어울리는 표현인거죠.

이제, 삼바 SAMBA 를 구축하는 방법을 소개해드립니다.


2-1. samba 설치하기

$ sudo apt-get install samba

2-2. smb.conf 파일 수정하기
$ sudo vi /etc/samba/smb.conf

smb.conf 파일은 약간의 수정과 추가할 것이 있어요... 


수정해야 할 것:
....
# security = user
....

줄을 찾아서 #을 지워 주석처리를 해제하고 저장합니다.

추가할 것:
[userid]
path = /home/userid
public = no
only guest = no
writable = yes
create mask = 0777
force user = userid

가장 마지막 줄 뒤에
를 추가합니다. 여기서 'userid'는 사용자 이름입니다.

가령 제 계정 이름이 jeongmin 이면

[jeongmin]
path = /home/jeongmin
public = no
only guest = no
writable = yes
create mask = 0777
force user = jeongmin

이렇게 추가하는 겁니다.



2-3. 사용자 등록
$ sudo smbpasswd -a userid // userid는 사용자 이름 

2-4. samba 재 시작
$ sudo /etc/init.d/smbd restart


리눅스 운영체제는 유닉스 시스템을 기반으로 하고 있으며, 기본적으로 운영체제가 부팅될 때,

'로그인'이라는 과정을 진행하게 됩니다. 


로그인 과정은 user ID 즉, 계정 이름과 비밀번호를 요구합니다. 

오늘은 user ID를 생성하는 방법

계정에 sudo 권한을 부여하는 방법에 대해서 설명하겠습니다.



1. user ID 생성

$ sudo adduser [userid]            // 사용자 계정을 새로 만드는 명령어


[userid]는 생성하고자 하는 user id 값입니다.

가령, jeongmin 이라는 계정을 추가하고 싶다면

$ sudo adduser jeongmin

이렇게 사용하시면 됩니다.



2. 계정에 sudo 권한 부여하기

 우선, sudo 권한이 무엇인지 부터 알려드려야 겠네요.

리눅스 운영체제를 사용해보신 적 있다면 sudo apt-get install... 등 과 같이 sudo 명령어를

은근히 몇 번 써보셨을 겁니다. sudo 명령어는 사용자에게 루트 권한을 부여하는 것입니다.


리눅스 운영체제에서는 일부 중요한 데이터나 시스템을 변경하는 등의

책임이 큰 행동에 대해서는 루트 권한을 요구합니다. 

쉽게 생각해서 루트 권한을 뭐든지 할 수 있는 슈퍼 유저라고 생각하십시오.


그리고 일반 사용자가 잠시동안 루트 권한을 빌리는 방법이 바로 sudo 명령어를 사용하는 것입니다.

그런데 아무 사용자나 sudo 명령어를 쓸 수 있다면 굳이 sudo 명령어가 필요하겠습니까?

일반 사용자도 sudo 명령어를 쓸 수 있는 계정/ 쓸 수 없는 계정이 있습니다.


한 사용자 계정이 sudo 권한을 부여 받으려면 /etc/sudoers 파일 안에 등록이 되어야 합니다.

다음 명령어를 입력해봅시다.

$ sudo visudo                         // /etc/sudoers 에 접근


/etc/sudoers 파일 내에서

....

# User privilege specification

root ALL=(ALL:ALL) ALL

....

이 곳에 

[userid] ALL=(ALL:ALL) ALL                // [userid] 는 권한을 부여하고자 하는 계정 이름.

을 추가하시면 됩니다.


예를 들어, jeongmin 을 추가했다면

jeongmin    ALL=(ALL:ALL) ALL

을 추가해주시면 됩니다.

computer science Archives - Global Processing Services | GPS


세마포어(Semaphore)란?


프로세스 간 메시지를 전송하거나, 공유메모리를 통해 특정 데이터를 공유하게 되는 경우 문제가 발생할 수 있다.

즉, 공유된 자원에 여러 개의 프로세스가 동시에 접근하면서 문제가 발생하는 것이다. 

공유된 자원 속 하나의 데이터는 한 번에 하나의 프로세스만 접근할 수 있도록 제한해 두어야 하는데, 

이를 위하여 고안된 것이 바로 Semaphore 세마포어 이다.

 

참고로, 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 막는 것이 세마포어이고,

공유된 자원의 데이터를 여러 스레드가 접근하는 것을 막는 것을 뮤텍스라고 한다.

 

+ Recent posts