RSS feed
<< Previous | Home | Next >>

비스타 x64 용 드라이버 없는 프린터(LBP-1210 등) 를 6...

비스타 x64 (Vista 64bit)용 드라이버가 없는 프린터를  GhostScript를 이용해  가상의  PostScript 프린터를 만들어 (x64 비스타에서) 사용하기  

 

갑작스레 주 사용 PC를 64bit 로 바꾸면서 OS도 Windows Vista로 바꾸게 되었는데 뜻하지 않게 기존에 잘 사용하던 LBP-1210 캐논 레이저 프린터의 드라이버가 없어서 사용할수없는 상황이 발생하고 말았다.

 

고객지원자료실을 찾아봐도 Vista 32bit 까지는 있지만(아마도 xp용을 패키징만 다시한듯) 64bit용은 없었다.

 

'이런...   프린터때문에 OS를 32비트로 돌아가야하나... , 아님 멀티부팅으로 xp를 다시 깔어?' 아무래도 이건 아닌것 같았다. 기존에 설치한 OS를 밀고 싶지도 않았고 다른 Vista x64 PC에서도 역시 인쇄가 안될것이므로 ...

다른 대안을 찾아보기로 했다.   그래서 생각한것이 예전에 보았던 기억이있는 GhostScript였다. 만일 GhostScript를 이용한 가상의 PostScript 지원 프린터를 만들수있다면 네트워크 공유를 통해 인쇄를 할수있을 텐데 하는 생각이었다.

 

그래서 구글링... ㅎㅎㅎ ^^  아니나 다를까... 

http://www.stat.tamu.edu/~henrik/GSPSprinter/GSPSprinter.html  에 보니 기대를 충족시켜주는 훌륭한 솔루션이 있었다.

 

해당 페이지의 내용은 Linux나 Mac 에서 지원하지 않는 프린터를 윈도우에 네트워크 공유를 통해 제공하려고 할때 중간에 가상 프린터를 잡아 주는 내용이었다. 

물론 당연히 다른 윈도우에서도 공유할수 있다.

 

순서는 다음과같다.


 1) 먼저  기존의  XP 실제 프린터(LBP-1210)드라이버를 설치하고 공유한다. 

      이미 해당 프린터가 설치되어있다면 공유까지 해주면 된다.
공유명은 "gsprinter" 로 해준다.  아래에서 해당 이름을 사용하게 된다.
 


  이때 프린프 스풀링기능은 해제해준다.

 

 



 

 

 

 2) 먼저 프린터가 있는 XP 가 설치된 PC에  GhostScript 를 설치한다.   설치경로 -> C:gs



    http://pages.cs.wisc.edu/~ghost/doc/GPL/gpl861.htm -->  gs861w32.exe    또는  www.sourceforge.net(미러사이트) 에 있는 gs861w32.exe    를 받는다.


 

   해당파일을 실행하여  C:gs 에 설치한다.  기본적으로 C:Program Filesgs 형태를 추천하지만  그냥 짧은 경로로 설치하는걸 추천한다. 그래서 이하 C:gs 기준으로 설명한다.

  


 


3)  Redmon17.zip 다운로드후 압축풀고 설치. 설치경로 -> C:gsredmon


  Redmon은  이후  가상 PostScript 설치시  Printer Port를  Redirected Port로 하기위해 먼저 설치되어야한다.


   클릭-> redmon17.zip을 다운로드 하여 C:gsredmon 경로에 압축을 풀고    setup.exe를 실행한다.

 

  설치가 끝나면 다음.



4) 가상 PostScript 프린터를 설치한다.


프린터추가마법사실행

 

 

로컬 프린터 선택(이때 플러그 앤 플레이... 는 해제)




포트는 Redirected Port를 선택한다.(이게 안보이면 앞서 3번설치가 제대로 안된것임)


포트명은 RPT1: 그대로 선택한다.


프린터는 HP Color LaserJet 4550 PS를 선택한다.



이름앞에 GS PS Printer 를 붙여 가상의 PostScript 프린터임을 표시해준다.
공유는 안함
테스트페이지 인쇄안함




스풀기능 해제



 

5) 가상의 GhostScript 프린터의 속성정보인 GhostScript Option File (mswinpr2.txt ) 생성 해준다.


 c:gsmswinpr2.txt 경로에 다음 내용으로 메모장등을 이용해 만든다.

 ==========================

-IC:gsgs8.61lib;c:gsfonts
    -sDEVICE=mswinpr2
    -dNoCancel
    -dNOPAUSE
    -dSAFER
    -sPAPERSIZE=a4

 ==========================


6) RPT1: 포트설정하기


 

 

Redirect this port to the program: 

 C:gsgs8.61bingswin32c.exe

 

Arguments for this program are:

 

 @c:gsmswinpr2.txt -sOutputFile="\spoolgsprinter" -

                                      -sOutputFile="%printer%Canon LASER SHOT LBP-1210" -


이렇게 하고 나서 인쇄를 하게 되면 (문제가 없는 경우 ^^;) 성공적으로 인쇄를 할수있는 데... 이때 아마도  아마도 인쇄시 공유된 pc에서  인쇄 대화창이 화면에 표시될텐데 

매번 확인해줄수 없으므로 이것을 생략 하는 방법은 아래내용을 

===========================================================
REGEDIT4
[HKEY_USERS.DEFAULTSoftwareMicrosoftWindows NTCurrentVersionDevices]
"gsprinter"="winspool,FILE:"
 =========================================================== 
레지스트리에  추가해준다.


 



NULL in Oracle  오라클에서 NULL 이란...

NULL in Oracle  오라클에서 NULL 이란...   그리고  NULL 컬럼을 인덱스를 사용하여 빨리 찾기 까지..


오라클 DB를 사용하게 될때  테이블에서  NULL  값 비교이  IS NULL 또는 IS NOT NULL 을 이용해야 한다는 것은 대부분 잘 알고 있다. 

그런데... NULL이 있을수있는 컬럼 값 비교시에  NULL에 대한 고려를 잊는 경우가 있다.


예를 들어 다음과 같은 상황을 보자

========
CREATE TABLE GOODIDEAS
(
  IDNO               VARCHAR2(15 BYTE),
  TITLE              VARCHAR2(256 BYTE),
  OWNER_ID           VARCHAR2(256 BYTE),
  AREA_NM       VARCHAR2(256 BYTE)
);
=======

=======
INSERT INTO GOODIDEAS VALUES (1,'제목1','김길동','서울');

INSERT INTO GOODIDEAS VALUES (2,'제목2','부길동','부산');

INSERT INTO GOODIDEAS VALUES (3,'제목3','강길동','강원');

INSERT INTO GOODIDEAS VALUES (4,'제목4','마길동','마산');

INSERT INTO GOODIDEAS VALUES (5,'제목5','모길동',NULL);
=======

이렇게 데이터를 넣고 지역(AREA_NM)이 서울인 사람을 조회한다면 다음과 같을것이다.

SELECT * FROM GOODIDEAS WHERE AREA_NM='서울';

======= 쿼리 결과 =======
IDNO TITLE OWNER_ID        AREA_NM
1 제목1 김길동         서울
=========================

만일 반대로 서울이 아닌사람을 찾고자 할때는 어떻게 하면 될까..?

이렇게 하면 ?

SELECT * FROM GOODIDEAS WHERE AREA_NM<>'서울';

======= 쿼리 결과 =======
IDNO TITLE OWNER_ID AREA_NM
2 제목2 부길동         부산
3 제목3 강길동         강원
4 제목4 마길동         마산

=========================

만일 원하는 봐가 지역이 없는 사람은 제외한다는 의도라면 위의 결과가 맞겠지만.. 단지 '서울'이라고 되어있지 않은 사람 모두를 의미 하는 거라면? 문제가 있게 된다.
AREA_NM 컬럼이 NULL인 사람은 빠졌다는 것이다.... 뭔가 이상하지 않은가...?   서울이 아닌 (WHERE AREA_NM <> '서울') 이라고 했으므로 NULL 도 서울이 아니라는 사실을 알기때문에
위에 5번도 조회되어야 하는게 아닌가?   아니다... 


다음을 조회해보자

SELECT * FROM dual WHERE NULL = NULL;
==== 쿼리 결과 =====
No rows selected.
===================

그럼 반대는 ?

SELECT * FROM dual WHERE NULL <> NULL;

==== 쿼리 결과 =====
No rows selected.
====================

NULL 은 비교자체가 안된다... ORACLE은 그냥 모른다이다라는 것이다. 그래서 NULL이 들어갈수있는 값에 대한 비교를 할때는 이점을 반드시 염두해 두어야 한다.

당연히 NULL 비교할때는  IS NULL 을 쓰거나 (이미 잘쓸것이다.. NULL을 찾을 경우) 

위와 같이 아닌 케이스를 찾고 싶을때는  NVL 또는 NVL2를 사용해서 다음과 같이

SELECT * FROM GOODIDEAS WHERE NVL(AREA_NM,'모름')<>'서울';

하면 진짜 의도 하는 AREA_NM 이 서울이 아닌 모든 레코드가 나오게 된다.

근데 NVL 사용시 주의 할 문제가 있는데 위처럼 아닌것(<>)찾는경우에는 어차피 다 뒤지게 되므로 상관 없겠지만  같은것(=) 을 찾을 때 사용했을 경우 해당 컬럼에 인덱스가 되어있더라도 인덱스 사용을 할수가없게 된다.

 왜나면 모든 값을 비교해봐야 NVL 결과를 알수있기 때문이다.



혹 NULL 인 것을 INDEX를 통해 빨리 찾고 싶을때는 다음과 같이 할수있다.

create index GOODIDEAS_null_ix on GOODIDEAS( NVL(AREA_NM,'null'));



이렇게 해두면 NVL(AREA_NM,'null)  형태로 인덱스가 되므로  이후  위 테이블에서 AREA_NM이 NULL인 것을 찾고자 할때.

==========쿼리 =============
SELECT * FROM GOODIDEAS WHERE NVL(AREA_NM,'null')='null';
============================
인덱스를 적용받게 되어 빨리 찾을 수 있다.


PLAN 을 보면 인덱스를 사용하게 되는 것을 알수있다
Plan
SELECT STATEMENT FIRST_ROWS Cost: 1 Bytes: 399 Cardinality: 1
 TABLE ACCESS BY INDEX ROWID TABLE GOODIDEAS Cost: 1 Bytes: 399 Cardinality: 1
  INDEX RANGE SCAN INDEX GOODIDEAS_NULL_IX Cost: 1 Cardinality: 1  



 여기서 하고싶은얘기는 NULL 사용시 주의할 사항이므로 여기까지만 정리해둔다.


리눅스에서 삼바와 XMBC 스트리밍 느린문제 해결기 ( Very Slow Samba and CCX(XBMC) Stre

윈도우에서  삼바로 스트리밍이 느린 경우 조치 ,  How to solve that streaming is very slow by Samba and CCX (XBMC) Streaming on Linux


윈도우에서 사용하던  CCXStream Server 를 Linux 깔고 XBMC(XBOX용 미디어플레이라고 보면된다) 에서 연결 했을때 뚝뚝 끊김 현상이있어서 프로그램문제려니 했다. 

윈도우에서는 잘되는데 리눅스에는 뭔가 잘 안맞나 보다 했는데 이문제가 Samba에서도 발생하는 것이었다.

 리눅스에서 구동하는 Samba에서 공유하는 폴더에 대해 파일복사는 빠른데 바로 영화를 플레이하는 경우에는 플레이어가 먹통이 되는 현상이 발생했다. 

  그래서 파일복사를 해봤는데 파일은 금방 복사가 잘되는 것이다. 그래서 Samba가 Vista에서는 뭔가 좀 잘 안되나, 혹시 설정을 좀 바꿔줘야 되나 싶어서 구글링을 해보았는데 
   
  (http://forums.whirlpool.net.au/forum-replies-archive.cfm/1048809.html) 뜻하지 않았던 내용을 찾게되었는데...  내용중에는 

1)  /etc/samba/smb.conf  에  다음 옵션 추가라하는 내용 
 socket options=TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF 8092


2) 하드디스크 퍼포먼스를 확인해보라는 내용
 hdparm -tT /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde

3) 마지막으로 해결했다는 질문자의 내용이 있었는데 뜻밖에 랜카드드라이버 문제였다.  그래서 혹시나해서 확인해보았는데 같은 문제였던것이다.
내용인즉  보드내장형 리얼텍(Realtek) 8111B gigabit ethernet  내장형( chip on-board )을 쓰고있는데 리눅스에는 r8169 드라이버 설치되어있다는 문제였다. 그래서 얼른 확인해보니 (요즘은 그놈에 있는 장치관리자에서 바로확인가능하다 편리...)
아닌게 아니라 똑 같은 상황이었다.  그래서 얼른 리얼텍 사이트(http://www.realtek.com/downloads/downloadsView.aspx?Langid=1&PNid=5&PFid=5&Level=5&Conn=4&DownTypeID=3&GetDown=false)에 접속해서  드라이버를 다운 받고 설치했다.  다운받은 파일에는 설치과정이 친절하게 잘 안내되어있다.  그리고 위와 같은 문제가 많았는지  r8169를 제거하는 내용부터 기술도 잘 되어 있었다. 


그리고 설치끝에 재 부팅하고 나니... 그동안 느리던 삼바(Samba)나  XBMC 스트리밍이 빵빵 뚤린다.  ㅎㅎ 이럴게 좋을수가.   스트리밍일 때는 뭔가 (파일전송과는) 다른 방식으로 처리되는가 보다 싶은 생각이들었다. 

어째든 의외 방법으로 해결되었지만...   드라이버설치가 예전 같지 않게 요즘은 참 설치가 잘되다 싶어서 좋다.


다음은 드라이버 설치방법 (다운받으면 Readme 에 포함되어있다.)   CentOS5 였고 아래대로 하면 순조로왔다.

================ Readme ========================

Check whether the built-in driver, r8169.ko (or r8169.o for kernel 2.4.x), is installed. 
# lsmod | grep r8169

If it is installed, please remove it.
# rmmod r8169
note: If the built-in driver cannot removed by rmmod, please edit /etc/modprobe.conf and comment 'alias eth0 r8169'. Then, remmove it again or reboot your computer.

Unpack the tarball :
# tar vjxf r8168-8.aaa.bb.tar.bz2

Change to the directory:
# cd r8168-8.aaa.bb

If you are running the target kernel, then you should be able to do :

# make clean modules (as root or with sudo)
# make install
# depmod -a
# insmod ./src/r8168.ko (or r8168.o in linux kernel 2.4.x)

You can check whether the driver is loaded by using following commands.

# lsmod | grep r8168
# ifconfig -a

If there is a device name, ethX, shown on the monitor, the linux 
driver is loaded. Then, you can use the following command to activate 
the ethX.

# ifconfig ethX up

,where X=0,1,2,...

=============================================






CentOS (REDHAT,Fedora 계열) 에서 Virtual...

CentOS(REDHAT,Fedora 계열) 에서 VirtualBox (Bridge)Host Interface 만들기



이번에는 다시 VirtualBox 이다. 가상머신갈아타기... ^^; VirtualBox같은 경우는 다른 VMWare나 VirtualPC 직접 실제 NIC 사용을 지원하는게 아니라 리눅스에서 NIC Bridge 를 이용한다. (물론 VMWare나 VirtualPC 도 내부적으로는 결국 브릿지 아닐까?)

이것를 사용자가 설정해줘야 해서 약간은 번거러운데... 해보면 일반적인 방법을 활용한다고 보면 되서 나쁘지도 않을것이다. 이것도 나중에 또 할때 삽질 방지 최소를 위해 정리해둔다.


=========== 실행 - 1) brctl(bridge-utils) 설치 ================

#yum install bridge-utils



===========실행 – 2) create bridgeinterface ================

#vi /etc/sysconfig/network-scripts/ifcfg-br0

============파일– 1) ifcfg-br0 ===================

DEVICE=br0

TYPE=Bridge

ONBOOT=yes

BOOTPROTO=dhcp

#BOOTPROTO=static

#IPADDR=192.168.10.254

#NETMASK=255.255.255.0


===
실행 – 2) 기존사용중인 인터페이스에 브릿지 인터페이스 연결 (Toadd the NIC eth1 to the bridge)======

#vi /etc/sysconfig/network-scripts/ifcfg-eth1

============파일– 1) ifcfg-br0 ===================

DEVICE=eth1

##... 기존 설정 ##

## 생략 ##

## 아래 bridge 추가

BRIDGE=br0

=== 실행 – 3)브릿지 시작하기 (Activethe bridge immediately ======

#/sbin/service network restart



= 실행 – 4)VirtualBox 에서 사용할 vbox0인터페이스 생성 (Createpermanent host interface =

#VBoxAddIF vbox0 br0

위에서 는 해당인터페이스를 사요할수있는 user가 된다.


이제 VirtualBox 메인화면에서네트워크 설정(networkadaptors)에서 호스트 인터페이스를 선택하고vbox0를 인터페이스로지정해주면 된다.


이렇게 해서 시작했는 관리자가 아닌 사용자에서시작하는 경우에는 다음과 같은 메시지가 뜰수 있다.



Fail toopen /dev/net/tun” for read/writer access, Please check thepermissions of that noe. Either run ‘chmod 0666’/dev/net/tun’or chage the group of that node and make yourself a member of thatgroup Make sure that these changes ara permanent. Especially if youare using udev

이때는 메시지 대로 chmod 를하거나 group 으로 넣어주면된다.

추처하는건 chmod 로는 group 까지만 access할 수있도록 해주고 해당 사용자를 해당 그룹에소속시켜주는게 좋을듯하다.

= 실행 – 4)/dev/net/tun 에 그룹권한을 주고 사용자는그룹에 포함시켜주기 (Createpermanent host interface =

#chmod 0660 /dev/net/tun

#usermod -G vboxusers -a



여기까지 하고 VirtualBox 시작하면끝이라고 되어있는데... 정말중요한....

만약 여기까지 했는데 제대로 동작이 안된다면.... CentOS 를 서버로 깔고 보안을 강제하는 경우일것이다.

아래처럼 br1 (bridge 를통한 access를 허용해주어야한다.



#iptables -I RH-Firewall-1-INPUT -i br0 -j ACCEPT

#/sbin/service iptables save



그리고 이제 시작하면 된다.


XML Factory 를 위한 Property 셋팅 예제

XML Factory 를 설정을 위한 Property 셋팅 예제


통상 Classpath 문제로 인해 뜻하지 않은  Parser가 사용되는 경우가 있는 이때 명시적으로 원하는 factory를 지정하려면 아래 처럼 한다.



//     System.setProperty("javax.xml.transform.TransformerFactory", "org.apache.xalan.processor.TransformerFactoryImpl");
        System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
        System.setProperty("javax.xml.parsers.SAXParserFactory", "org.apache.xerces.jaxp.SAXParserFactoryImpl");