다음 이전 차례

2. Using mgetty

mgetty는 init process로 직접 호출해야만 login이 가능하기 때문에 /etc/rc같은 shell script, 또는 대화적으로 호출할 수 없습니다. 다음의 section에서 어떻게 이것을 하는 지 설명합니다.

2.1 How mgetty works

어떻게 mgetty가 동작하는 지를 이해하기 쉽게하기 위해서 modem이 /dev/tty2a에 연결되어 있다고 가정하고 여러 상황에서 serial line에 연결된 모뎀을 control할 때 무엇이 발생하는 지를 예를 들면서 알아보겠습니다.

computer가 booting될 때 virtual terminal, serial line, 그리고 modem 등 적절한 i/o device들에서 동작하는 getty들을 호출하는 init process를 시작합니다. init은 mgetty에게 /dev/tty2a line을 control하도록 하는 설정file인 /etc/inittab (System V의 경우)을 읽어들입니다. 다음에 /etc/utmp에 입력하고 (login은 이것이 필요하고, 따라서 수동으로 mgetty를 기동하려고 하면 login할 수 없습니다.) 명시된 명령행에 따라서 새 mgetty process를 fork합니다.

mgetty는 시작할 때 먼저 다른 process가 잡고 있는 유효한 lock file이 있는지 점검합니다. 있으면 이 port는 사용중이기때문에 mgetty은 lock file이 사라질 때까지 기다립니다. 존재하지 않는 process들 (stale locks)의 유효하지 않은 lock file들은 무시됩니다.

port가 열리면 mgetty는 자신의 lock file을 만들고, modem을 초기화한 다음에 lock file을 없앱니다. 그리고서는 port에 무엇인가가 발생하기를 기다립니다. character를 읽는 것이 아니고 poll()이나 select()를 이용해서 읽을 만한 것이 있는지 알아볼 분입니다.

character가 도착되면 uucico등 다른 program이 전화를 걸기 시작했거나 아니면 modem이 RING을 보냈거나 하는 두 가지의 가능성이 있습니다. 첫번째 경우, mgetty는 port를 건드리지 않습니다. 이것은 전화거는 프로그램이 유효한 lock file을 만들었으면 쉽습니다. mgetty는 그것을 알아차리고, 사라지기를 기다립니다. (init은 다음 call을 기다리는 새 mgetty process를 시작합니다.)

두번째 경우, lock file이 없으면 mgetty는 전화가 울린다고 여기고, lock file을 만들고 가능한 character를 읽습니다. RING을 찾으면 ATA를 보내서 전화를 들고 CONNECT message를 기다립니다. 상대방이 fax machine이면 FAX_SPOOL_IN (보통 /var/spool/fax/incoming) 디렉토리에 fax를 저장한 후에 나갑니다. modem이면 /etc/issue를 인쇄하고 login prompt를 표시합니다. login string을 받아들였으면 /bin/login을 호출하여 여기서부터의 일들을 처리하게 합니다. login은 password를 읽고 user의 login shell이나 uucico이나 dialup SLIP link 등 무엇이 됐던지 시작하지만, mgetty는 그것에 관여하지 않습니다. 누군가가 login되어 있는 동안에는 다른 program들이 modem을 사용하지 못하도록 lock file이 존재합니다.

(login.config설정file을 사용하면, /bin/login이 아닌 다른 login program을 부를 수도 있습니다. 자세한 것은 밑을 보십시오.)

어떤 이유에서든지 mgetty가 종료되면 init은 해당 port를 reinitialize하고 (이래서 mgetty는 즉시 종료하지 않고 lock file이 없어지기를 기다립니다.) 바로 전의 login이 남겨놓은 lock file을 제거하는 새로운 mgetty process를 시작합니다.

lock file 취급은 까다롭지만 매우 중요합니다. modem을 사용하는 모든 program은 한가지의 locking protocol에 동의하는것이 필수입니다. 그렇지 않으면 program은 modem이 사용중인 줄 모르고 어쨌든 전화를 걸려고 할 것입니다. 전형적인 lock file은 /var/lock/LCK...ttyxx이고 현재 modem을 사용중인 process의 process ID (PID)를 포함합니다. 다른 process들은 그것을 읽어서 현존하는 process에 속하는 지, stale이어서 제거할 수 있는 지를 알 수 있습니다. process가 lock file을 다른 곳에서 찾거나 어떤 것은 ASCII로 PID를 적고, 어떤 것은 binary number로 된 PID를 읽으려 하면 유효하지 않게 됩니다. (mgetty와 sendfax는 외부 lock file이 binary이든지 ascii든지 상관없지만 다른 program들은 상관있습니다. mgetty는 어떤때는 이러한 문제를 알아차려서 warning을 log합니다.)

2.2 The '/etc/inittab' entry

전형적인 mgetty의 inittab 등록은 다음과 같이 합니다. (SystemV-style OS's)

 
   <tt>:rlevel:<respawn|off>:/usr/local/sbin/mgetty [options] <device>

여기서 tt는 init과 내부용의 who가 사용하는 device명의 간략형입니다. 보통 S0 또는 2A 등으로 됩니다.

rlevel은 네번찌 field의 command가 가동되는 runlevel로서 23 또는 56 등으로 되는데 man init과 현존하는 /etc/inittab을 보시기 바랍니다.

다음 field는 init에게 해당항목이 active(respawn)한지 그렇지 않은지 (off) 알려줍니다. 그리고 네번째 field는 가동할 program의 full path를 명시합니다.

다음의 선택사항들이 가능합니다.

-x <level>

이것은 debugging level을 정합니다. 높은 level을 주면 내부작동에 대한 매우 자세한 정보가 log file에 적히기 때문에 문제를 진단하는데 매우 중요합니다.

-s <speed>

이것은 port의 speed를 정합니다. 명시하지 않으면 policy.h (definition DEFAULT_PORTSPEED)에 있는 default가 사용됩니다.

-k <space>

이것은 incoming FAX spool directory에 요구되는 최소 kbyte을 정합니다. spool directory에 이만큼의 space가 없으면 연결은 종료됩니다. default는 1 megabyte입니다.

-m 'expect send ...'

이것은 modem 초기화 sequence를 정합니다.

-r

이것은 직접연결선에 사용합니다. (modem chat이 되지 않습니다.)

-p <login prompt>

이것은 (다양한 escape가 허용되는) login promt를 정합니다.

-n <rings>

이것은 전화를 받기 위한 ATA를 보내기 전에 받아들일 RING message의 수를 정합니다. default는 한개의 RING입니다.

-R <sec>

이것은 ring-back나 ring-twince를 가능하게 합니다. 이렇게 하면 mgetty는 call을 즉시 pick-up하지 않고 전화를 건사람은 첫번째 ring뒤에 전화를 끊었다가 <sec>초 뒤에 다시 걸어야 합니다.

-i '/etc/issue'

이것은 login을 prompt하기 전에 보여줄 issue file을 명시합니다.

-S '<fax_document>'

이것은 (full path를 적어서) polling을 요구하는 fax machine에 보내줄 문서, 또는 (한 줄에 한 file씩) G3 fax file을 list한 text file을 명시합니다.

/etc/inittab의 등록 본보기는 다음과 같습니다.

 F1a:23:respawn:/usr/local/sbin/mgetty -x 3 tty2a

option에 대해 더 자세한 설명을 원하시면 mgetty(1) man page를 보십시오.

2.3 Choosing the right device

serial line마다 별도의 device를 두 개씩 마련하는 operating system들도 있는데, 그중에서 하나는 getty에게 특별히 할당됩니다. 이것은 mgetty와는 잘 맞지 않기때문에 좋은 방법은 아니고 auto-answer mode에 주로 적용됩니다.

밖으로 전화를 거는 device를 같이 사용할 때에만 mgetty가 전화를 수동으로 받게할 수 있습니다. /dev/modem으로 symlink를 만드는 사람들도 있는데, 이때는 모든 comm program들도 똑 같이 적용해야지 그렇지 않으면 lock file name때문에 문제가 생깁니다.

여러 system에 대한 보기는 다음과 같습니다 (역자주: Linux만을 예로 듭니다).

Linux:

/dev/ttyS* 입니다. (/dev/cua*가 아닙니다. Linux Section 을 보십시오.)

2.4 Log files

mgetty는 모든 일을 LOG_PATH.<device>라는 logfile에 적습니다. (LOG_PATH는 policy.h에 정의되어 있습니다.)

예를 들면 /var/log/mgetty.ttyxx에 system에서 일어나는 사항을 볼 수 있습니다. (fatal error가 있으면 console에도 적는데 가능하지 않으면 ADMIN에게 mail을 보냅니다.) log file의 명칭은 policy.h에서 바꿀 수 있습니다.

-DSYSLOG 옵션으로 mgetty를 compile하면 auditing과 error log message를 syslog에도 적습니다. (system이 지원해야 합니다.)

2.5 Denying logins

mgetty가 전화를 받지 않게 하려면 /etc/nologin.<device> (예를 들면 /etc/nologin.tty2a) file을 만듭니다. mgetty가 incoming call을 알아차렸는데 이 file이 있으면 전화를 받지 않습니다. 이렇게 해야 전화를 거는 사람은 login이 허락되지 않는 상황에서 쓸데없는 전화로 돈을 허비하지 않게 됩니다. policy.h에 있는 NOLOGIN_FILE를 변경해서 filename을 바꿀 수 있습니다.)

이렇게 하면 - 낮에는 음성통신으로 쓰는 전화선에 연결된 modem의 경우 등에 - 꽤 세련된 scheduling을 할수 있습니다. modem이 저녁 9시부터 아침 7시까지만 전화를 받게 할 수 있습니다. cron으로 하여금 /etc/nologin.device file을 아침 7시에 만들어서 modem이 낮동안에는 전화를 받지 않게 하고, 저녁 9시에 지워서 밤에는 전화를 받게 하면 됩니다.

자연적으로 확장시킬 수 있습니다. 예를 들면, 주말에만 전화를 받게 한다든지 (비슷한 cron job입니다.), disk의 용량이 5 Mbyte보다 적으면 번화를 받지 않게 한다든지 (주기적으로 process가 free disk space를 검사해서 /etc/nologin.* file을 만들게 합니다.) 등입니다.

2.6 Direct serial lines

두 unix machine 또는 unix machine과 다른 것이 direct serial line으로 연결되어 있고 outgoing traffic과 충돌하지 않는 unix쪽에 getty program을 운영하고자 할 때도 (예를 들면, 두 unix machine이 있어서 모두 getty를 운영하고 있고, 모두 uucp 연결을 기동할 수 있는 경우) mgetty를 쓸 수 있습니다. -r 옵션으로 시작하면 modem을 initialize하지도 RING을 기다리지도 않습니다. 다만 port에서 조용히 기다릴 뿐입니다. 상대편에서는 mgetty가 최소 한 character를 받기 전에는 /etc/issue를 볼 수 없기 때문에 두 mgetty는 서로 예기할 수 없습니다.

이러한 방법은 leased line with modem에 대해여 lease line mode에서도 유효할 것이지만 modem setup에 따를 지도 모릅니다.

2.7 Interaction between mgetty and other programs

보통 전화건 사람이 login name을 넣으면 mgetty는 /bin/login을 불러서 password를 검사하고 system login을 합니다.

특별한 경우로는 /bin/login대신에 다른 program을 부를 수 있습니다. 예를 들면, U*로 시작하는 login name들에게는 (uucico가 authentication을 하는) /usr/lib/uucp/uucico -L <username>을 부르거나 (이 때에는 taylor uucp 1.05나 patches/taylor.pl에 있는 patch를 적용한 taylor uucp 1.04을 같이 사용혜야 합니다.), incoming Fidonet call에 대하여 (Eugene Crosser의 ifmail package에 있는 ifcico를 사용하여) /usr/lib/fnet/ifcico를 부를 수도 있습니다.

mgetty로 이 모든 것을 할 수 있습니다. login.config 설정 file로 조정하는 데, 이것은 보통 (policy.h의 LOGIN_CFG_FILE로 정의된) /usr/local/etc/mgetty+sendfax/에 있습니다. 저는 comment를 많이 사용하여 sample file을 준비했으니 거기에 있는 사용구문을 보아주시기 바랍니다. mgetty는 -DFIDO로 compile되어야 incoming fido call을 알아차릴 수 있습니다.

보안때문에 걱정되시면 다음의 방법을 적용하시기 바랍니다. 신뢰하고 이미 아는 사용자들에 대해서만 /bin/login을 부르고, /bin/false는 다른 login name에 대해서 불러서 login.config에 기재된 사람들만 log in할 수 있도록 합니다.

2.8 Using Caller-ID to selectively accept or reject calls

어떤 전화회사들은 Caller ID라는 service를 가입자들에게 제공하여 전화건사람의 전화번호가 전송되어도록 합니다. 지원여부는 해당회사에 알아보셔야 합니다.

modem이 callerid 정보를 추출할 수 있고, mgetty가 policy.h에 정의된 CNDFILE로 compile되었으면 mgetty는 전화를 받기전에 전화건사람의 번호를 검사할 수 있습니다. (지금 당장은 ZyXEL에만 적용된다고 알고 있습니다. Rockwell용도 만들었지만 아직 feedback을 얻지 못했습니다. 지원자는 나서 주시기 바랍니다.) CNDFILE이 정의되지 않았거나 그 file이 없다면 모든 전화가 허용됩니다.

중요사항 : 대부분의 analog modem들은 (mgetty.config에 'rings 2'라고 설정하여) 대기 RING수를 2개 이상으로 해야 합니다. ID code가 첫번째와 두번째 RING 사이에 보내지기 때문입니다. mgetty가 너무 빨리 전화를 들면 modem은 이 정보를 얻을 수 없습니다.

전화를 받을 지 받지 않을 지는 policy.h의 CNDFILE로 정해진 설정 file로 조정합니다. 보통 /usr/local/etc/mgetty+sendfax/dialin.config가 default입니다. (보기 file은 default에 의거하여 설치되었습니다.)

그 file에는 일련의 token들이 newline, comma, tab, space 등으로 구분되어 있습니다. 맞는 token이 있을 때까지 callerid 숫자는 각각의 token과 차례대로 비교됩니다. callerid 정보가 token의 길이만큼 비교되어 같으면 일치되는 것입니다. token앞에 '!'이 붙어 있으면 전화를 받지말라는 뜻입니다. 'all'은 어떤 전화번호든지 일치시키기 때문에 cndfile을 더이상 scan하지 않습니다. callerid 숫자가 없으면 'none'으로 가정합니다. '#'로 시작되면 comment입니다. file의 맨 끝에는 'all'이 있다고 가정됩니다.

예를 들면 다음과 같습니다.

          # list of my friends' data lines
          3433535, 7445343, 5551212
          # dad's fax
          4164646777
          # disallow [other] calls from numbers matching the following prefix:
          !416
          # disallow that speed dialer that keeps hitting my machine
          !3444444
          # allow all calls with the following prefixes
          832, 555
          # don't allow calls when there's no callerid:
          !none
          # It's okay to accept calls from out of area
          # ("OUT_OF_AREA" token seems ZyXEL specific)
          OUT_OF_AREA
          # disallow all other calls
          !all

앞으로 Chris Lewis가 상대방 전화 번호에 따른 특별한 modem initialization string (예를 들면 2400 bps용, fax용 등)을 더할 계획입니다.

대부분의 경우에는 이러한 정적 설정으로도 충분합니다. 특별히 필요하다면 이것을 결정하기 위해 외적 program을 실행시킬 수도 있습니다. 그 program 이름은 mgetty.config에 있는 cnd-program statement로 설정할 수 있습니다. 그 명령행 인수는 다음과 같습니다.

 
<program> <tty> <CallerID> <Name> <dist-ring-nr.> <Called Nr.> 

CallerID는 알려진다면 상대방전화의 번호이고, 그렇지 않으면 'none'입니다. Name은 상대방의 이름이거나, 알려지지 않았을 경우에는 ' '입니다. dist-ring-nr는 전화선에 독특한 RING이 있고 modem이 이를 지원할 때의 RING type이거나 알려지지 않은 전화에 대해서는 '0'입니다.

Called Nr.는 (ISDN이고, ELSA나 ZyXEL 2864I가 하듯이 modem이 host에 걸려진 전체번호를 signal해야만 의미가 있는) 걸려진 번호입니다.

예를 들면 ISDN을 사용할 때 12345에서 56789로 건 전화가 ttyS3로 왔으면 다음과 같이 어떤 program으로 연결됩니다.

        
check.cnd ttyS3 12345 '' 0 56789 

그 program은 전화를 받아들일 지 결정할 값을 반환하는데, 일반적으로 다음의 값들이 정의되어 있습니다.

        0 - accept call, no specific preferences 
        1 - reject call                          

장래의 version에서는 mgetty/vgetty가 전화를 받도록 되어 있는 방식(data/voice/fax/...)을 외적으로 선택하도록 하겠지만 아직은 구현되지 않았습니다.

주의 : 이것은 전화를 받아들일 것인가 아닌가를 결정하는 데에만 쓰이는 것이 아닙니다. caller ID를 X11 window하에서 외부 LCD screen에 표시하든지, 인쇄하거나 D-Channel Callback을 하든지 간에 Caller ID data를 필요로 하는 것이면 무엇이든지 할 수 있습니다.

주의2 : 부르는 program의 특성에 조심하십시오. user id 0 (root)로 실행되기 때문에 조심하지 않으면 security에 위험할 수도 있습니다.

2.9 Runtime configuration for mgetty: 'mgetty.config'

compile되어진 default만으로도 mgetty는 썩 잘 됩니다. (그것은 오랫동안 유일한 설정방법이었습니다.) 그러나, 그것은 융통성이 그리 많지 않고, 특히 다른 modem type을 쓰고 있으면 매우 불편합니다. 명령행 option으로 built-in default를 바꿔줄 수는 있지만, 이 방법도 /etc/inittab의 기재사항을 너무 길고 읽기 어렵게 만들기 때문에 완전하지는 않습니다.

(policy.h의 MGETTY_CONFIG로 정의된) config file support로 compile되었다면 mgetty는 Taylor UUCP와 매우 유사하게 설정 file을 사용하여 동적설정을 아주 쉽게 할 수 있습니다.

config file은 보통 /usr/local/etc/mgetty+sendfax에 있고 mgetty.config로 되어 있습니다.

그 형식은 매우 쉽습니다. 줄마다 keyword가 있고, 공백으로 구분된 인수가 있을 수 있습니다. 빈줄과 (#로 시작되는) comment line도 허용됩니다.

config file은 port <tty-name> line마다 구분된 port별 section으로 묶여져 있습니다. 첫번째 port line 전에 있는 모든 사항은 global default를 명시하고, 두 port statement의 사이에 있는 모든 사항은 바로 뒤이어 오는 device에만 유효한 설정을 명시합니다. 제가 보기를 들겠습니다.

         # global defaults:                     
         # fax station id is always the same    
         fax-id ++49-89-1234                    
         # per port stuff                       
         port tty1a                             
         # This modem can't fax                 
         modem-type data                        
                                                
         port tty2a                             
         # more verbose logging for this modem  
         debug 9                                

각 줄의 data 부분은 (대부분의 경우) string이거나, (modem talk을 명시하는, whitespace로 구분되어지는 일련의 string으로서 expect로 시작하고 send가 오고 다시 expect를 적는) chat sequence이거나, (leading character인 1-9/O/Ox 등에 따라서 10진수, 8진수, 또는 16진수 등으로 해석되는) 정수이거나, (y(es)나 t(rue), 그 반대인 n(o)나 f(alse)인) boolean입니다. boolean value이외에는 인수를 명시하지 않으면 (허용된다면) 'value not set'로 되거나, (value가 의무사항이면) 'error'로 됩니다. Boolean의 경우에는 'true'로 해석됩니다.

명령행에 적으면 설정항목을 많이 대체할 수 있습니다. 그 때에는 명령행의 option이 설정 file의 설정에 우선합니다. (그리고 built-in default보다 우선합니다.) 보통 built-in default는 policy.h에서 정해집니다.

가능한 설정항목은 다음과 같습니다. (명령행 option이 가능한것은 bracket에 나타냈습니다.)

`speed' [-s] PORT SPEED

사용할 port speed를 정수값으로 명시합니다. Default는 DEFAULT_PORTSPEED입니다. 주어진 speed가 유효하지 않다면 mgetty는 심하게 불평하고 종료합니다.

`switchbd' FAX RECV. SPEED

주로 Rockwell chipset이 그렇지만, 어떤 modem은 fax mode로 될 때 19200 bps로 돌려집니다. 다른 것들은 다른 speed로 바뀔 수도 있습니다. (제가 아는 바는 없습니다.) modem이 Rockwell 기반이고 fax가 잘 수신되지 않으면 switchbd를 19200으로 해보십시오. (Warning: 이것이 잘못 정해지면 fax 수신은 틀림없이 실패합니다. 대부분의 정상적인 modem에는 필요 없습니다.) Default는 FAX_RECV_SWITCHBD입니다.

`direct' YES/NO [-r]

Direct line을 사용할 것이라고 mgetty에게 알립니다. Mgetty는 modem을 초기화하지 않으며, RING을 기다리지도 않을 것입니다. 다만 character를 기다려서 issue file과 login prompt를 내보냅니다. nullmodem cable으로 연결하려면 이 option이 필요합니다. Mgetty는 modem용으로 설계되어서 default는 no입니다.

`blocking' YES/NO [-b]

mgetty가 blocking mode로 device를 열도록 합니다. 이는 carrier detect가 set되기까지는 open() system call은 이루어지지 않음을 말합니다. 이것은 mgetty가 getty로 call되면 set됩니다. 이 기능이 얼마나 유용할 지는 모르겠지만 완전히 하기 위해 포함시켰습니다. Default는 no입니다.

`port-owner' USERNAME/USERID

mgetty가 username에 tty line을 chown하게 합니다. (string이나 integer uid로 명시하여야 하며, 이때 integer는 유효한 수여야 합니다.) 이것은 security목적상 강력하게 권장됩다. modem line을 그릇되게 사용되지 않으려면 오직 신뢰하는 사용자에게만 port access를 주십시오. Default는 PORT_OWNER입니다.

`port-owner' USERNAME/USERID

mgetty가 이 group id에게 tty line을 chgrp하게 합니다. (group name이나 integer gid로 주어질 수 있습니다.) 주어지지 않거나 유효하지 않으면 port owner의 primary group id가 사용됩니다. Default는 PORT_GROUP입니다.

`port-mode' PERMISSONS

device를 chmod할 permission을 명시합니다. 결코 modem device를 전방위접근가능하도록 하지 마시고 0660이나 더 나아가서는 0600을 사용해야 좋습니다. Default는 PORT_MODE입니다.

`toggle-dtr' YES/NO

시작할때 modem을 reset하기 위해서 DTR line을 lower해야 하는지를 mgetty에게 알립니다. Default는 yes이지만 어떤 (소수의) modem들은 알레르기 반응을 하여 crash됩니다.

`toggle-dtr-waittime' MSECS

DTR line을 low로 유지할 시간을 명시합니다. Default는 500 millisecond입니다.

`data-only' YES/NO [-D]

mgetty가 modem의 성능중에서 data 부분만 쓰도록 하고 fax 부분은 쓰지 않도록 합니다. Default는 false입니다. modem이 incoming fax와 data의 call을 구분하지 못할 경우에 유용합니다.

`fax-only' YES/NO [-F]

mgetty가 fax 전용 mode로 됩니다. modem이 incoming fax와 data의 call을 구별하지 못하고, fax가 data보다 더 중요하다고 판단될 때 유용합니다. security 이유로 data call을 멈추고 싶을 때에도 유용합니다. (이것은 login.config로도 할 수 있습니다.)

`modem-type' [-C] MTYPE

port에 연결된 modem의 종류를 명시합니다. Default는 DEFAULT_MODEMTYPE입니다. 유효한 option들은 다음과 같습니다.

auto

mgetty가 알아서 modem type을 찾아냅니다. (이것은 경우에 따라서는 바람직하지 않거나 구식 modem에서는 실패할 지도 모릅니다. Mgetty가 ATI 명령으로 modem type을 찾아내고 그에 따른 적당한 fax class를 선정합니다. (미확인 modem type이라서) 그렇게 할 수 없을 때에는 class 2.0을 먼저 해보고, 그 다음으로는 class 2를 시도합니다.

c2.0

Modem이 class 2.0 fax mode입니다. Class 2보다 더 나은 표준이라서 두개 다 가능하면 class 2.0이 더 잘 작동됩니다. USR, ZyXEL 1496과 2864, 그리고 ELSA 등의 modem에 적용된다고 알려졌습니다.

cls2

Modem이 class 2 fax modem이고 mgetty는 class 2.0을 시도하지 않습니다.

c2.1

Modem이 새로운 ITU T.32 standard (class 2.1)에 부합합니다. 제가 알기로는 아직까지 여기에 맞는 modem은 없지만, class 2.1은 class 2.0과 흡사하므로 쉽게 지원할 수 있을 겁니다.

cls1

Modem은 class 1 fax만 할 수 있습니다. 아직 구현되지 않았습니다. (게다가 조금도 권장하지 않습니다.)

c1.0

Modem이 ITU T.31 standard에 맞는 class 1 fax를 할 수 있습니다. 이것은 class 1보다 많이 좋지는 않지만 (가능하면 class 2나 2.0을 쓰십시오.), 어쨌든 더 좋은 겁니다. 아직 구현되지 않았습니다.

cls2ok

(더이상 쓰이지 않습니다. modem-quirks 02를 사용하십시오)

data

'-D'와 같아서 fax 초기화를 하지 않습니다.

(아직까지는) 이 option으로 mgetty가 fax mode만 하고 data call을 거부하도록 할 수는 없으니꼬 fax-only true statement을 사용토록 하십시오.

`modem-quirks' BITMASK

어떤 모뎀은 fax standard를 특이하게 해석합니다.. mgetty+sendfax의 내부 작동중에는 그런 modem에 적용되는 것입니다. 인수는 fax_lib.h에 있는 값에서 조성된 것으로서 quirk당 한 bit입니다. 이것을 쓰는 modem이 있다면 그것은 자동적으로 검출되어서 적당하게 처리되기 때문에 이 option을 쓸 일은 거의 없을 것입니다.

지금으로서는 다음과 같이 quirk가 정의되어 있습니다.

        0x01  leave the modem in class 2 mode instead of switching      
              to class 0 before sending ATA (you might try this if      
              adaptive fax/data answer doesn't work).                   
        0x02  class 2 bit order is correct (MultiTech) - unimplemented  
        0x04  do not trust +FPTS:x,lc,blc values                        
        0x08  do not wait for XON character when sending pages          
        0x20  old USR Courier V.32 AT+FCC/+FMINSP bug workaround        

`init-chat' [-m] EXPECT SEND EXPECT SEND ...

mgetty에게 modem을 initializing하도록 chat sequence를 알려줍니다. 주의 : 그 sequence는 expect로 시작하는데 대부분의 경우에 '""' (nothing)입니다. UUCP가 이런식으로 하고 저도 혼란을 일으키지 않으려고 순서를 이렇게 정했습니다.

        보기 : 

           init-chat "" ATQ0E1V1H0 OK ATL0M0S0=0 OK AT&K3 OK

`force-init-chat' EXPECT SEND EXPECT SEND ...

modem이 간단한 AT 명령에도 반응하지 않는 mode에서 교착되는 때도 있습니다. 이것은 보통 modem이 DTR drop을 무시하도록 설정되어 있으면서 아직 상대방으로 data 연결이 되어있기 때문에 발생합니다. voice modem을 사용한다면 voice mode에서 교착될 수가 있습니다.

이러한 상황에서는 modem이 적당한 response를 돌려보내지 않기 때문에 정상적인 init-chat은 time-out이 됩니다.

force-init-chat chat sequence를 써서 modem을 정상적인 상태로 돌릴 수가 있습니다. default 설정에서는 DLE ETX character를 보내서 voice modem을 살리고 (pause)+++(pause)ATH0 sequence를 보내서 modem을 data mode에서 command mode로 돌려 놓습니다.

이 sequence를 (아무 불편 없이) init-chat의 앞부분에 붙일 수도 있습니다만 '+++'의 앞뒤에 있는 pause때문에 매우 늦어집니다. .

@minus ????????

어떤 모뎀은 initializing하면서 data mode에서 fax mode로 아니면 그 반대로 될 때 부분적인 설정이 무시되는 경우도 있습니다. 예를 들면, USR model중에는 'Caller ID delivery' (AT#CID=1) 설정이 무시되기 때문에, ELSA modem중에는 voice mode에서 data mode로 바뀔 때 현재의 DTE port speed가 무시되기 때문에, RING message를 틀린 baud rate와 함께 내보내게 합니다.

이런 modem들은 이 명령을 써서 fax와 voice의 initializing이 모두 된 다음에 AT command가 실행되도록 할 수 있습니다. 하지만 조심하십시오! 만약 이때에 ATZ (modem reset)이나 그 비슷한 것을 쓰면 fax/voice 설정 모두가 지워집니다.

`MODEM-check-time' SECONDS

소리도 없이 무너져 내리고는 하는 modem도 있습니다. 이 option을 주면 mgetty는 modem이 아직도 반응하는 지를 간단한 'AT...OK' sequence로 매 수초마다 검사합니다. 반응하지 않으면 mgetty는 재가동하고 전체 modem reset을 합니다. Default는 MODEM_CHECK_TIME입니다.

`rings' [-n] NNN

mgetty가 전화를 받기까지 기다려야 할 RING message 수를 정합니다. Default는 1입니다. 주의: 무슨 이유로든지 modem이 자동으로 전화를 받으면 ATS0=mmm으로 설정한 값과는 다른 것으로 설정하십시오. 그렇게 하지 않으면 modem의 자동전화받기와 mgetty의 수동전화받기가 충돌합니다. (대부분의 modem은 자동전화받기를 하는 중에 명령이 들어오면 전화를 내려놓습니다.)

@minus????????????????????????????

ISDN modem이 전화건 상대방의 번호 (MSN)을 host로 signal해줄 수 있다면 이 option으로 그 MSN을 특별히 지정된 RING에 붙일 수 있습니다. 그 MSN은 list와 비교되어서 첫번째로 맞는 것이 특별히 지정된 RING 번호로 사용됩니다.. 왼쪽에서 오른쪽으로 list를 조사합니다.

이것은 ELSA와 ZyXEL의 ISDN terminal adaptor에서 작동한다고 알려져 있습니다.

`get-cnd-chat' CHAT SEQUENCE

이것은 modem이 'Caller ID' 찾아내기를 지원하지만 특수한 명령을 주어야 CID information을 얻을 때 필요합니다. 지금은 일부 ELINK ISDN adaptors (Elink-ISDN section 잠조)에만 필요하고, 다른 대부분의 CID가능 modem들은 알아서 CID른 보내기때문에 이것이 필요없습니다.

ring을 2 이상으로 설정하십시오. 그렇지 않으면 CID얻기 code가 작동되지 않습니다.

@minus ?????????????

incoming call을 받기전에 가동할 program을 명시합니다. (polich.h의) CNDFILE이서 정적 Caller ID selection이 충분치 않거나 Caller ID data를 다른 목적(예를 들면 displaying)으로 쓰려면 이것을 사용하십시오. Caller-ID section 참조.

`answer-chat' CHAT SEQUENCE

이것은 전화를 받으려고 쓰는 명령 sequence입니다. 보통 default인 '"" ATA CONNECT \c \r '로 하면 되지만 (ATA가 허용되지 않기 때문에) `ATA' 대신에 `ATS0=1'으로 해야하는 modem도 있습니다. 여분의 '\r' expect string을 주어야 code가 전체 CONNECT xyz\r string을 잡을 수 있습니다. \r이 없어도 작동은 되지만 logging information이 자세하지 않을 것입니다. 지금은 \r이 구현되지 않았으므로 작동하지 않습니다. 쓰지 마십시오.

`answer-chat-timeout' SECS

anser-chat동안에는 여기에서 명시한 시간내에 expect string이 보여져야 합니다. Default는 80초입니다. 이 시간은 ATS7=...의 modem 설정명령으로 정한 시간보다 적어도 5초정도 더 길어야 합니다.

`autobauding' YES/NO [-a]

어떤 modem은 연결후에 DTE line speed를 통신선 speed로 전환합니다. 예를 들면 'CONNECT 2400'을 보낸 다음에 modem은 2400 bps로 전환합니다. 새 modem은 보통 DTE baud rate를 lock하는 switch가 있는데 이것을 강력히 권장합니다. modem이 자꾸 이 speed switch를 할 때 autobauding을 true로 설정하면 mgetty는 거기에 따를 것입니다.

`ringback' YES/NO [-R]

modem과 전화를 같은 선에서 사용해야만 할 때 ringback이나 ring-twice를 이용할 수 있습니다. mgetty는 첫번째는 전화를 받지는 않고 기억하고 있다가, (ringback-time으로 명시된 시간내에 다시 걸려오는) 두번째 전화를 받습니다.

`ringback-time' SECS

ringback이 활성화되어 있다면 첫번째와 두번째 전화의 경과시간을 명시합니다. Default는 30초입니다.

`ignore-carrier'

modem이 DCD (carrier detect) line을 표시하지 않거나, serial port나 cable 또는 serial driver가 망가졌으면 CONNECT까지는 잘돼고 나서 mgetty나 login이 block할 수가 있습니다. (이때 모든 것이 잘 작동하다가 갑자기 port로 더이상 아무것도 보내지지 않게 됩니다.) operating system에 따라서 '/etc/issue'를 print하기전이거나 'password:' prompt다음일 수 있습니다. 이것을 풀려면 ignore-carrier를 true로 설정하여 carrier detection의 switch를 끄십시오. Default는 false입니다. 주의: 이렇게 하면 전화한 사람이 깨끗이 logging out하지 않고 그저 전화를 끊으면 system은 그것을 알아채지 못하게 됩니다. 이것은 modem을 hanging하게 만드는 등의 결과가 되게 합니다.

`issue-file' [-i] FILE

이것은 login prompt에 앞서서 print되는 file입니다. Default는 '/etc/issue'입니다. connect speed, date 등등으로 특별한 character를 대체할 수 있습니다. 밑에 있는 (login-prompt) list를 보십시오.

`prompt-waittime' MSECS

이것은 isuue file과 login prompt를 print하기 전에 modem과 선이 조정될 때까지 기다릴 시간을 명시합니다. Default는 500 millisecond입니다.

`login-prompt' [-p] PROMPT

이것은 mgetty가 내보낼 login prompt를 경시합니다. 이 string(과 issue file)에 있는 특별한 character들이 인식되면 다른 것으로 교체됩니다.

login prompt의 최대길이는 (확장후의) 140 character로 제한됩니다.

`login-time' SECS

사용자가 log in할 수 있는 최대 시간입니다. 그 시간내에 login이 이루어지지 않으면 mgetty는 전화를 끊습니다. Default는 policy.h에 있는 MAX_LOGIN_TIME입니다.

`fido-send-emsi' YES/NO

이것은 mgetty가 -DFIDO로 compile됐을 때문 유효합니다. mgetty가 login을 prompt하기 전에 FidoNET style ``EMSI_REQA77E'' packet을 보내야 하는 지를 통제합니다. Default는 on입니다. FIDO 지원으로 compile했어도 PPP client (또는 사용자)가 그 string때문에 혼란스러워 하는 문제를 경험하신다면 이것을 끄십시오.

`fax-id' [-I] LOCAL FAX NUMBER

이것은 fax mode에서 전화건 상대방에게 알릴 fax station ID를 정합니다. (보통 fax 전화번호입니다.) Default는 FAX_STATION_ID입니다.

`fax-server-file' [-S] POLL CONTROL FILE

이것은 누군가 fax polling mode로 전화해왔을 때 상대방이 받을 문서인 fax file입니다.

보통 그 file은 text file로서 전하한 상대방 machine으로 보낼 G3 file을 한 줄에 한 개씩 적습니다. Comment line은 (#로 시작하는데) 무시됩니다. 후진일관성을 위해서 mgetty는 이 file자체가 G3 file인지 검사해서 그렇다면 이 file을 보냅니다. (이때는 한 page만 보낼 수 있습니다.)

모든 modem이 fax poll server mode를 지원하지는 않습니다. ZyXEL과 MultiTech는 지원하고 USR은 그렇지 않다고 알고 있습니다.

`diskspace' [-k] KBYTES

이것은 fax 수신을 허락할 용도로 fax spool directory에서 쓸 수 있는 disk space의 최소량을 mgetty에게 알립니다. Default는 1 Mbyte입니다.

`notify' MAIL ADDRESS

이것은 fax가 수신되었을 때 mail을 받을 주소입니다. 충분히 시험되지 않았습니다.

`fax-owner' USERNAME/UID

`fax-group' GROUPNAME/GID

`fax-mode' PERMS

이것은 port-owner/group/mode와 비슷해서 fax가 들어올 때 mgetty가 쓰기 위해서 owner, group, 그리고 file mode를 명시합니다. Default는 FAX_IN_OWNER, FAX_IN_GROUP, and FAX_FILE_MODE에서 얻어집니다.

`debug' [-x] DEBUG LEVEL

이것은 mgetty가 할 logging량을 정합니다. 4는 적당하고 5는 자세하고 9는 정말이지 지저분합니다. 시험해보십시오! log data는 'policy.h'의 LOG_PATH로 명시하는데 대개 `/var/log/mgetty.ttyxx'입니다.

`gettydefs' GD TAG

이것은 mgetty의 gettydefs feature를 쓴다면, 권장하지 않습니다만, 주어진 line에 사용할 gettydefs tag을 명시합니다. gettydefs manpage, mgettydefs manpage를 참조하십시오.

`term' TERMINAL TYPE

이것은 TERM=xxx terminal type variable을 getty가 정하도록 하는 Linux 또는 이와 비슷한 OS에서 (예를들면 '/etc/profile 또는 '$HOME/.profile'에서) 그것을 정하지 않았으면 mgetty로 하실 수 있습니다. 'term vt100'과 같이 적으십시오. 제가 볼때는 per line base에서 terminal type을 명시하는 것은 좋지 않습니다. (전화거는 사람들마다 다른 terminal type을 쓴다면 어쩌시겠습니까?) 그래서 default는 정해지지 않았습니다.


다음 이전 차례