Xchat 스크린샷 스크립트(오랜만에... 뻘짓!)

예전부터 한번 해보고싶었던… xchat 스크립트를 이용하여 데스크탑 스크린샷을 올리는 방법을 겨우 해결봤습니다.

뭐… 고수분들은 다들 알고 계시겠지만…
설마… 모르시는 분들을 위해서;

이렇게 글씁니다.(붕어인 날 위해서… )

우선 irc 프로그램인 xchat을 설치합니다.

[quote:1wq85os0]sudo apt-get install xchat[/quote:1wq85os0]

xchat을 설치하셨다면…
다음은 스크린샷을 찍기위해서 스크린샷 프로그램(?)을 설치합니다.
스크립트에서는 imagemagic을 사용합니다.

[quote:1wq85os0]sudo apt-get install imagemagic[/quote:1wq85os0]

scrot를 사용했구나… 죄송 ㅋ 그냥 다설치해 버립니다.
아랫것만 설치해두 되요 ^^

[quote:1wq85os0]먼소리여 scrot 씀
sudo apt-get install scrot[/quote:1wq85os0]

음… 이쯤하면 대략… 설치할것은 다 설치한듯 합니다…
다음은 xchat의 스샷 스크립트를 만듭시다.

아래 스크립트를 다음과 같이 저장합니다.
(걍 손쉽게 gexit를 열어서 밑의 파일을 contrl + c >> contrl + v 하자.)
그리고 다음과 같이 저장합니다.

[code:1wq85os0]#!/usr/bin/env python

-- coding: utf-8 --

vim: set fenc=utf-8:

$Id$

*** 랜덤여신이 만드신 xchat script ***

+ ACPI cpu온도 출력 추가 - sakuragi

+ Audacious, Quod Libet의 재생곡 출력부분을 추가 - sakuragi

+ 명령 추가 - 강분도

from future import division

module_name = ‘barosl-xchat-script’
module_description = ‘barosl's xchat script’
module_version = ‘0.1’

import xchat
import os, sys
import user; os.chdir(user.home+‘/.xchat2/’)
import time
import ftplib
import time
import re
import shutil
try: import xmms
except ImportError: xmms = None
import random
execfile(‘/home/oming/.xchat2/xchat-script-config.txt’)

execfile(‘/home/ahs/.xchat2/xchat-script-config.txt’) 만약 자신의 계정이 ahs 라면..이와같이 변경

execfile(‘/home/oming/.xchat2/xchat-script-config.txt’)

lspci_cmds = (‘/sbin/lspci’, ‘/usr/sbin/lspci’, os.popen(‘which lspci 2> /dev/null’).read().strip())
lspci_cmd = ‘’
for x in lspci_cmds:
if x and os.path.isfile(x): lspci_cmd = x

def fn_send_msg(msg):
for x in msg.split(‘\n’):
if x: xchat.command(‘say %s’ % x)

def on_done(word, word_eol, userdata):
if len(word) != 2:
print ‘* usage: /done <server-name>’
return xchat.EAT_ALL

server_name = word&#91;1&#93;
if server_name in cfg&#91;'cmd_rc'&#93;&#58;
	for x in cfg&#91;'cmd_rc'&#93;&#91;server_name&#93;&#58;
		xchat&#46;command(x)

return xchat&#46;EAT_ALL

def on_scrshot(word, word_eol, userdata):
f_name = cfg[‘scrshot’][‘filename’].replace(‘%d’, str(int(time.time())))
f_name_arg = ‘’
delay = 0

if len(word) &gt; 1&#58;
	try&#58; delay = int(word&#91;1&#93;)
	except&#58; f_name = word&#91;1&#93;; f_name_arg = word&#91;1&#93;

if len(word) &gt; 2&#58;
	try&#58; delay = int(word&#91;2&#93;)
	except&#58; f_name = word&#91;2&#93;; f_name_arg = word&#91;2&#93;

f_name += '&#46;jpg'
if delay &lt; 0&#58; delay = 0
if delay &gt; 30&#58; delay = 30
if delay&#58;
	print '* %d 초 기다립니다&#46;' % delay
	xchat&#46;command('timer %d 스샷 %s' % (delay, f_name_arg))
	return xchat&#46;EAT_ALL
	time&#46;sleep(delay)

#res = os&#46;system('import -window root -quality 100 /tmp/%s' % f_name)
res = os&#46;system('scrot /tmp/%s' % f_name)
if res&#58;
	#print '* import 명령 실행에 실패하였습니다&#46; imagemagick 라이브러리가 설치되어 있는지 확인하세요&#46;'
	print '* scrot 명령 실행에 실패하였습니다&#46; scrot가 설치되어 있는지 확인하세요&#46;'
	return xchat&#46;EAT_ALL

try&#58;

	ftp = ftplib&#46;FTP(cfg&#91;'scrshot'&#93;&#91;'ftp_host'&#93;, cfg&#91;'scrshot'&#93;&#91;'ftp_user'&#93;, cfg&#91;'scrshot'&#93;&#91;'ftp_passwd'&#93;)
	# passive mode setting ftp&#46;set_pasv(0) &#58; home, ftp&#46;set_pasv(1) &#58; school, ftp&#46;set_pasv(1) is default
	ftp&#46;set_pasv(0)
	ftp&#46;cwd(cfg&#91;'scrshot'&#93;&#91;'ftp_path'&#93;)
	ftp&#46;storbinary('STOR %s' % f_name, open('/tmp/%s' % f_name))

#	shutil&#46;copyfile('/tmp/%s' % f_name, '/a282500/%s' % f_name)
except Exception, e&#58;
	print '* failed to make screenshot&#58; %s' % str(e)
	return xchat&#46;EAT_ALL

fn_send_msg(' &#91;데스크탑 스크린샷&#93;  %s' % (cfg&#91;'scrshot'&#93;&#91;'url_base'&#93;&#46;replace('%s', f_name))) #xchat&#46;get_info('nick'), 

return xchat&#46;EAT_ALL

def on_playing(word, word_eol, userdata):
data = ‘’
funcs = (get_playing_mplayer,get_playing_amarok,get_playing_audacious,get_playing_quodlibet,get_playing_noatun,get_playing_xmms_bmp,get_playing_kaffeine)
for func in funcs:
data = func()
if data: break
if data:
fn_send_msg(’ [재생중] %s’ % data)
if func == get_playing_amarok:
open(‘/tmp/barosl-playing’, ‘w’).write(data)
open(‘/tmp/barosl-playing-path’, ‘w’).write(os.popen(‘dcop amarok player path’).read()[:-1])

fn_send_msg(’ [같이듣기] %s’ % ‘http://note.barosl.com/onair.php’)

else&#58;
	fn_send_msg(' &#91;재생중&#93;  없음')
return xchat&#46;EAT_ALL

def get_playing_mplayer():
data = os.popen(‘ps aux’).read()
pos_start = data.find(‘mplayer ‘)
if pos_start == -1: return None
pos_start += len(‘mplayer ‘)
pos_end = data.find(’\n’, pos_start)
if pos_end == -1: return None
res = data[pos_start:pos_end].strip()
pos = res.rfind(’.’)
if pos != -1: res = res[:pos]
pos = res.rfind(‘/’)
if pos != -1: res = res[pos+1:]
return res

def get_playing_amarok():
res = os.popen(‘dcop amarok player nowPlaying’).read()[:-1]
if res: return res + ’ (%s)’ % os.popen(‘dcop amarok player totalTime’).read()[:-1] + ’ on ‘+os.popen(‘dcop amarok player album’).read()[:-1]+’’
return None

def get_playing_audacious():
data = os.popen(‘audtool current-song’).read()
if data.find(‘not running!’) != -1: return None
if not data: return None
res = data[:-1] + ’ (’
res += os.popen(‘audtool current-song-length’).read()[:-1] + ‘)’
return res

def get_playing_quodlibet():
data = os.popen(‘quodlibet --print-playing’).read()
if data.find(‘노래가 없습니다.’) != -1: return None
if not data: return None
res = data[:-1] + ’ (’
for line in open(user.home+‘/.quodlibet/current’):
if line.startswith(‘~#length’):
len = int(line[line.find(‘=’)+1:-1])
res += str(int(len/60)) + ‘:’ + (‘0’ + str(int(len%60)))[-2:] + ‘)’
return res

def get_playing_noatun():
res = os.popen(‘dcop noatun Noatun title’).read()[:-1]
if res: return res + ’ (%s)’ % os.popen(‘dcop noatun Noatun timeString’).read().split(‘/’)[1][:-1]
return None

def get_playing_xmms_bmp():
if not xmms: return None
res = xmms.get_playlist_file(xmms.get_playlist_pos())
if not res: return None
return res

def get_playing_kaffeine():
res = os.popen(‘dcop kaffeine KaffeineIface title’).read()[:-1]
return res

def on_misonyun(word, word_eol, userdata):
fn_send_msg(‘/kick 미소년’)
channel = xchat.get_info(‘channel’)
xchat.command(‘part %s kicked’ % channel)
xchat.command(‘join %s’ % channel)
return xchat.EAT_ALL

def on_uname(word, word_eol, userdata):
fn_send_msg(os.popen(‘uname -a’).read())
return xchat.EAT_ALL

def on_uptime(word, word_eol, userdata):
uptime = int(float(open(‘/proc/uptime’).read().split(’ ‘,1)[0]))
day, hour, minute = int(uptime/60/60/24), int(uptime/60/60)%24, int(uptime/60)%60
if day: res = ‘%d일 %d시간 %d분’ % (day, hour, minute)
elif hour: res = ‘%d시간 %d분’ % (hour, minute)
else: res = ‘%d분’ % (minute)
fn_send_msg(’ [업타임] '+res)
return xchat.EAT_ALL

def on_disk(word, word_eol, userdata):
res = os.popen(‘df -m’).read()
res = re.sub(‘(\n?)(tmpfs|none).\n’, ‘\1’, res)
res = re.sub('(\n?).
(/boot|/dev|/.dev)\n’, ‘\1’, res)
res = res[res.find(‘\n’)+1:]
size_total, size_used = 0, 0
for line in res.split(‘\n’):
if not line: continue
if not line.startswith(‘/dev/’): continue
arr = re.split(‘\s+’, line)
size_total += int(arr[1])
size_used += int(arr[2])
size_unused = size_total - size_used
fn_send_msg(’ [디스크] 전체: %.1f GB | 사용중: %.1f GB (%.2f %%) | 남음: %.1f GB (%.2f %%)’ % (size_total/1024, size_used/1024, size_used100/size_total, size_unused/1024, size_unused100/size_total))
return xchat.EAT_ALL

def on_ostype(word, word_eol, userdata):
fn_send_msg(’ [운영체제] %s’ % os.popen(‘uname -s’).read()[:-1]+’ '+os.popen(‘uname -r’).read()[:-1])
return xchat.EAT_ALL

def on_cpu(word, word_eol, userdata):
res = ‘’
for line in open(‘/proc/cpuinfo’):
if line.startswith(‘model name’):
res += ’ ‘+line[line.find(’: ‘)+2:-1]
if line.startswith(‘cpu MHz’):
res += ’ (’+line[line.find(': ‘)+2:-1]+‘MHz’
if not res: res = ’ (Unknown)’

if os&#46;path&#46;isfile('/proc/acpi/thermal_zone/THRM/temperature')&#58;
	res += ' / '+open('/proc/acpi/thermal_zone/THRM/temperature')&#46;read()&#91;25&#58;-1&#93;
res += ')'

fn_send_msg(' &#91;프로세서&#93;  %s' % res&#91;1&#58;&#93;)
return xchat&#46;EAT_ALL

def on_mem(word, word_eol, userdata):
res = ‘’
for line in os.popen(‘free’):
if line.startswith(‘-/+ buffers/cache:’):
arr = re.split(‘\s+’, line[len(‘-/+ buffers/cache:’):].strip())
mem_used = int(arr[0])
mem_total = mem_used + int(arr[1])
mem_free = mem_total - mem_used
res = ‘전체: %.1f MB | 사용중: %.1f MB (%.2f %%) | 남음: %.1f MB (%.2f %%)’ % (mem_total/1024, mem_used/1024, mem_used100/mem_total, mem_free/1024, mem_free100/mem_total)
break
if not res: res = ‘(Unknown)’
fn_send_msg(’ [메모리] %s’ % res)
return xchat.EAT_ALL

def on_gpu(word, word_eol, userdata):
if not lspci_cmd: fn_send_msg(’ [그래픽] lspci 를 찾을 수 없습니다.‘); return xchat.EAT_ALL
res = ‘’
for line in os.popen(lspci_cmd):
try: line = line.split(’ ‘, 1)[1].strip()
except: continue
if line.startswith(‘VGA’) or line.startswith(‘Display’):
res = ’ [그래픽] %s\n’ % line
break
if not res: res = ’ [그래픽] (Unknown)’
fn_send_msg(res)
return xchat.EAT_ALL

def on_resolution(word, word_eol, userdata):
res = ‘’
dimensions, depth = ‘’, ‘’
for line in os.popen(‘xdpyinfo’):
line = line.strip()
if line.startswith(‘dimensions:’):
dimensions = line[len(‘dimensions:’):].strip().replace(‘pixels’, ‘픽셀’).replace(‘millimeters’, ‘밀리미터’)
if line.startswith(‘depth of root window:’):
depth = line[len(‘depth of root window:’):].strip().replace(’ planes’, ’ 비트’)
if dimensions: res += ’ ‘+dimensions
if depth: res += ’ | 색상: ‘+depth
if not res: res = ’ (Unknown)’
fn_send_msg(’ [해상도] %s’ % res[1:])
return xchat.EAT_ALL

def on_sound(word, word_eol, userdata):
if not lspci_cmd: fn_send_msg(’ [사운드] lspci 를 찾을 수 없습니다.‘); return xchat.EAT_ALL
res = ‘’
for line in os.popen(lspci_cmd):
try: line = line.split(’ ‘, 1)[1].strip()
except: continue
if line.startswith(‘Multimedia audio controller:’):
res += ’ [사운드] %s\n’ % line[len(‘Multimedia audio controller:’):].strip()
if not res: res = ’ [사운드] (Unknown)’
fn_send_msg(res)
return xchat.EAT_ALL

def on_network(word, word_eol, userdata):
if not lspci_cmd: fn_send_msg(’ [네트워크] lspci 를 찾을 수 없습니다.‘); return xchat.EAT_ALL
res = ‘’
for line in os.popen(lspci_cmd):
try: line = line.split(’ ‘, 1)[1].strip()
except: continue
if line.startswith(‘Network’) or line.startswith(‘Ethernet’):
pos = line.find(’: ‘)
res += ’ [네트워크] %s\n’ % line[pos+2:]
if not res: res = ’ [네트워크] (Unknown)’
fn_send_msg(res)
return xchat.EAT_ALL

def on_sysinfo(word, word_eol, userdata):
fn_send_msg(‘== %s 시스템 정보 ==’ % os.popen(‘uname -n’).read()[:-1])
on_ostype(word, word_eol, userdata)
on_uptime(word, word_eol, userdata)
on_cpu(word, word_eol, userdata)
on_mem(word, word_eol, userdata)
on_gpu(word, word_eol, userdata)
on_resolution(word, word_eol, userdata)
on_network(word, word_eol, userdata)
on_sound(word, word_eol, userdata)
on_disk(word, word_eol, userdata)
return xchat.EAT_ALL

def on_invited(word, word_eol, userdata):
xchat.command(‘join %s’ % word[0])
print ‘* 초대되었습니다: %s by %s’ % (word[0], word[1])

def on_msg(word, word_eol, userdata):
user = word[0]
msg = word_eol[3][1:]
if user.endswith(‘@도연.users.HanIRC.org’):
if msg.startswith(‘!music ‘):
song = msg[len(’!music ‘):]
if song.find(’'’) == -1:
os.system(‘noatun '/home/barosl/box/기타/rod/%s.mp3' &’ % song)
return xchat.EAT_NONE

def on_play_amarok(word, word_eol, userdata):
query = word_eol[1]
query_for_cli = query.replace(‘'’,‘'\''’).replace(‘"’,‘\"’)
data = os.popen(‘dcop amarok collection query 'select * from artist where name = "%s" limit 1'’ % query_for_cli).read()[:-1]
if data:
fn_send_msg(‘* 이 아티스트의 음악 중 하나를 무작위로 선택합니다: %s’ % query)
data2 = os.popen(‘dcop amarok collection query 'select count() from tags where artist = "%s" limit 1'’ % data.split(‘\n’)[0]).read()[:-1]
data = os.popen(‘dcop amarok collection query 'select * from tags where artist = "%s" limit %d,1'’ % (data.split(‘\n’)[0], random.randrange(int(data2)))).read()[:-1]
else:
fn_send_msg(’
음악을 검색합니다: %s’ % query)
data = os.popen(‘dcop amarok collection query 'select * from tags where title like "%%%s%%" limit 1'’ % query_for_cli).read()[:-1]
arr = data.split(‘\n’)

for i in xrange(len(arr)): print i, arr[i]

if not data&#58;
	fn_send_msg('* 음악을 찾지 못했습니다&#46;')
if data&#58;
	url = arr&#91;0&#93;
	artist = os&#46;popen('dcop amarok collection query \'select name from artist where id=&quot;%s&quot;\'' % int(arr&#91;4&#93;))&#46;read()&#91;&#58;-1&#93;
	album = os&#46;popen('dcop amarok collection query \'select name from album where id=&quot;%s&quot;\'' % int(arr&#91;3&#93;))&#46;read()&#91;&#58;-1&#93;
	title = arr&#91;6&#93;
	length = int(arr&#91;-3&#93;)
	fn_send_msg('* 음악을 찾았습니다&#46; 재생합니다&#58;  %s - %s  (%d&#58;%02d) on %s' % (artist, title, length/60, length%60, album))
	os&#46;popen('dcop amarok playlist playMedia \'%s\'' % url&#46;replace('\'','\'\\\'\'')&#46;replace('&quot;','\\&quot;'))
return xchat&#46;EAT_ALL

def on_topic(word, word_eol, userdata):
global is_etopic
if globals().get(‘is_etopic’):
xchat.command(‘settext %stopic %s’ % (xchat.get_prefs(‘input_command_char’), word[1]))
return xchat.EAT_ALL
return xchat.EAT_NONE

def on_topic_change_or_creation(word, word_eol, userdata):
global is_etopic
if globals().get(‘is_etopic’):
is_etopic = False
return xchat.EAT_ALL
return xchat.EAT_NONE

def on_etopic(word, word_eol, userdata):
global is_etopic
is_etopic = True
xchat.command(‘topic’)
return xchat.EAT_ALL

def on_run(word, word_eol, userdata):
fn_send_msg(‘!실행 %s’ % word_eol[1])
xchat.command(‘exec -o %s’ % word_eol[1])
return xchat.EAT_ALL

def on_away(word, word_eol, userdata):
away = xchat.get_info(‘away’) and True or False
nick = xchat.get_info(‘nick’)
away_new = not away
nick_new = nick
reason = (len(word_eol) > 1 and word_eol[1]) or ‘’
if reason: away_new = True
if not away_new and nick_new.endswith(‘부재’):
nick_new = nick_new[:-len(‘부재’)]
if nick_new.endswith(‘^’) or nick_new.endswith(‘_’):
nick_new = nick_new[:-1]
elif away_new:
nick_new += ‘^부재’
if nick != nick_new:
xchat.command(‘nick %s’ % nick_new)
if away != away_new:
if away_new: xchat.command(‘away %s’ % reason)
else: xchat.command(‘away’)
return xchat.EAT_ALL

알리미를 위해...

def on_server_text(word, word_eol, userdata):
# ping/pong 오류 메시지인가?
msg = word[0]
pos = msg.find(‘/QUOTE’)
if pos != -1:
# 맞다면, pong 답변 보냄. (pong 을 fong 으로 치환해서)
cmd = msg[pos+7:].replace(‘PONG’, ‘FONG’)
cmd = cmd
xchat.command(cmd)

return xchat&#46;EAT_NONE

알리미를 위해...

def on_connected(word, word_eol, userdata):
xchat.hook_timer(500, alimi_timer)
return xchat.EAT_NONE

알리미를 위해...

def alimi_timer(userdata):
context = xchat.find_context(server=‘alimi.cafe24.com’)
if context: context.command(‘QUOTE FONG abc’)
return 0

알리미를 위해...

xchat.hook_print(‘Server Text’, on_server_text)
xchat.hook_print(‘Connected’, on_connected)

xchat.hook_command(‘done’, on_done)
xchat.hook_command(‘스샷’, on_scrshot)
xchat.hook_command(‘scrshot’, on_scrshot)
xchat.hook_command(‘곡’, on_playing)
xchat.hook_command(‘play’, on_playing)
xchat.hook_command(‘music’, on_playing)
xchat.hook_command(‘미소년’, on_misonyun)

xchat.hook_command(‘uname’, on_uname)
xchat.hook_command(‘uptime’, on_uptime)
xchat.hook_command(‘disk’, on_disk)
xchat.hook_command(‘sysinfo’, on_sysinfo)
xchat.hook_command(‘정보’, on_sysinfo)
xchat.hook_command(‘os’, on_ostype)
xchat.hook_command(‘운영체제’, on_ostype)
xchat.hook_command(‘cpu’, on_cpu)
xchat.hook_command(‘mem’, on_mem)
xchat.hook_command(‘메모리’, on_mem)
xchat.hook_command(‘gpu’, on_gpu)
xchat.hook_command(‘그래픽’, on_gpu)
xchat.hook_command(‘graphic’, on_gpu)
xchat.hook_command(‘resol’, on_resolution)
xchat.hook_command(‘해상도’, on_resolution)
xchat.hook_command(‘resolution’, on_resolution)
xchat.hook_command(‘sound’, on_sound)
xchat.hook_command(‘사운드’, on_sound)
xchat.hook_command(‘network’, on_network)
xchat.hook_command(‘네트워크’, on_network)

xchat.hook_command(‘재생’, on_playing)
xchat.hook_command(‘play’, on_playing)

xchat.hook_print(‘Invited’, on_invited)
xchat.hook_server(‘PRIVMSG’, on_msg)

xchat.hook_print(‘Topic’, on_topic)
xchat.hook_print(‘Topic Change’, on_topic_change_or_creation)
xchat.hook_print(‘Topic Creation’, on_topic_change_or_creation)
xchat.hook_command(‘etopic’, on_etopic)

xchat.hook_command(‘run’, on_run)

xchat.hook_command(‘부재’, on_away)
#xchat.hook_command(‘away’, on_away) # 기존 기능과 충돌함

print ‘* barosl's xchat script loaded’

EndOfFile[/code:1wq85os0]

[quote:1wq85os0]xchat-script.py[/quote:1wq85os0]

그리고 또 다음 파일을 [b:1wq85os0]xchat-script-config.txt[/b:1wq85os0]란 파일명으로 저장합시다.

[quote:1wq85os0]#!/usr/bin/env python

-- coding: utf-8 --

vim: set fenc=utf-8:

$Id$

from future import division

cfg = {}
cfg[‘cmd_rc’] = {}
cfg[‘scrshot’] = {}

서버 접속시 실행할 명령 예제입니다.

활성화하려면, 아래의 주석을 풀고,

각 서버 설정의 ‘접속 명령’ 에 ‘done HanIRC’ 와 같이 써 주세요.

cfg[‘cmd_rc’][‘HanIRC’] = (‘msg ^^ login team1ab ㅉㅉㅉ’,‘mode MK★ +iwx’,)
cfg[‘cmd_rc’][‘Luatic’] = (‘msg ^^ login team1ab 냐옹’,‘mode MK★ +iwx’,)
#cfg[‘cmd_rc’][‘HanIRC’] = (‘msg ^^ 인증 sjkoo 1234’,‘mode 스진 +x’,)
#cfg[‘cmd_rc’][‘FreeNode’] = (‘msg nickserv identify <비밀번호>’,‘mode <닉네임> +E’,)

#cfg[‘scrshot’][‘ftp_host’] = ‘<FTP 서버 주소>’
#cfg[‘scrshot’][‘ftp_host’] = ‘oming.host22.com
[color=#FF0000:1wq85os0]cfg[‘scrshot’][‘ftp_host’] = ‘’[/color:1wq85os0]
#cfg[‘scrshot’][‘ftp_user’] = ‘<FTP 아이디>’
#cfg[‘scrshot’][‘ftp_user’] = ‘oming_ID’
[color=#FF0000:1wq85os0]cfg[‘scrshot’][‘ftp_user’] = ‘’[/color:1wq85os0]
#cfg[‘scrshot’][‘ftp_passwd’] = ‘<FTP 비밀번호>’
cfg[‘scrshot’][‘ftp_passwd’] = ‘oming_password’
[color=#FF0000:1wq85os0]cfg[‘scrshot’][‘ftp_passwd’] = ‘’[/color:1wq85os0]
#cfg[‘scrshot’][‘ftp_path’] = ‘<스크린샷을 업로드할 FTP 디렉토리 경로>’
#cfg[‘scrshot’][‘ftp_path’] = ‘/public_html’ 이부분은 그냥 냅두자…
[color=#FF0000:1wq85os0]cfg[‘scrshot’][‘ftp_path’] = ‘/public_html’[/color:1wq85os0]
#cfg[‘scrshot’][‘url_base’] = ‘http://서버/경로/%s
#cfg[‘scrshot’][‘url_base’] = ‘http://ftp.oming.net/%s’ 저는 이렇게지만… 여러분은 아래와 같이…
#cfg[‘scrshot’][‘url_base’] = ‘http://oming.host22.com/%s’ 이부분은 자신에게 맞게 수정 뒤에 /%s 부분은 냅둬야 한다…
[color=#FF0000:1wq85os0]cfg[‘scrshot’][‘url_base’] = ‘’[/color:1wq85os0]
#cfg[‘scrshot’][‘filename’] = ‘barosl-desktop-%d’
cfg[‘scrshot’][‘filename’] = ‘mk-desktop-%d’

EndOfFile[/quote:1wq85os0]

두 파일을 모두 저장하였다면… 자신의 홈폴더로 이동합니다.

자신의 홈폴더를 보면… [b:1wq85os0].xchat2[/b:1wq85os0] 라는 폴더가 있습니다.
만약 보이지가 않는다면… [b:1wq85os0]contrl + h[/b:1wq85os0]키를 누릅시다.
contrl + h 키를 누르면… 숨겨진 파일들이 보입니다.

저같은 경우… [b:1wq85os0]/home/oming/.xchat2/[/b:1wq85os0] 라는 폴더입니다.

.xchat 폴더로 이동한다음 아까 저장한 파일들을 이 폴더로 이동시킵니다.
(xchat-script.py && xchat-script-config.txt)

아참… 그리고 gedit로 다시 아까 그 두가지 파일을 열고 빨간색 부분을 자신의 설정에 맞게 수정하셔야 합니다.

첫번째 xchat-script.py파일을 자신의 계정에 맞게 oming 이란 부분을 수정합니다.
두번째 파일은 밑부분에 설명할 ftp 계정얻기 방법을 보시고 수정하시기 바랍니다.

ftp 계정얻기

이부분이 힘든데… 요즘 ftp계정얻으려니… 힘들더군요; 그래서 구굴에서 무료ftp사이트 검색하니… 나오는 ftp 호스팅사이트를 이용했습니다.
뭐… 무료이니… 긔냥 사용해도 괜찮겠지요…

이곳에서 정보 얻었습니다…

http://blog.devsketch.co.cc/16

[b:1wq85os0]http://www.000webhost.com[/b:1wq85os0] 다음 사이트로 이동하여 계정하나를 얻습니다.
오른쪽 보시면 sign up! 이 있습니다. 자 회원가입합시다…
가입은 간단합니다… 우리나라처럼… 이름 나이 주민등록번호 물어보지도 않구…
간단하게 가입합시다.

가입을 하셨다면… http://members.000webhost.com/ 이쪽으로 접속하여
가입할때 사용한 이메일과 비밀번호를 입력하여 로그인 합니다.

나중에 기역안나면… 가입할때 사용한 메일 확인하면… 다나와있습니다…

로그인 하셨다면… Go to CPanel을 누릅니다… 못찾겠으면… 찾기를 이용하여 찾으세요…
다음으로… View FTP Details를 찾아 누릅니다… 이것도 못찾겠으면… 찾기 이용.

자… 이제 FTP에 관한 자신의 계정에 대한 정보가 상세히 나옵니다…
그 계정 정보를 보시고, 아까 위에서 저장했던 xchat-script-config.txt파일을 수정합시다.

뭐… 재대로 수정하셨다면… 두 파일을 저장합시다.
이제 모든것이 끝나고… 마지막으로 xchat에서 스크립트를 로딩하는 일만 남았군요.

xchat를 실행합시다.
맨위에 보면… [b:1wq85os0]창(w)[/b:1wq85os0]가 있습니다. 눌러서 [b:1wq85os0]추가 기능과 혼잣말[/b:1wq85os0]을 클릭합니다.
열기 > ~/.xchat/xchat-script.py 파일을 열어 줍시다. ( 여는 방법은 다아시겠죠… (애구… ))

스크립트가 잘 추가돼었으면 이제 실행하는일뿐…
이제 스크립트를 한번 실행해 봅시다.

대화창에 [b:1wq85os0]/스샷[/b:1wq85os0] 이라고 입력해 봅니다…

해외사이트라 그런지… 조금 느리지만… 그래도 기다리다 보면… 어느덧 스크린샷의 url 주소가 대화창에 출력되는것을 알수있씁니다.

Ps:
이건뭐… 설명이 설명같지 않아…

제대로 돼는지는 저도 잘 모르겠군요 ^^
예전부터 한번 스샷스크립트 써보고싶었는데;;;

여러모로 도움주신… 우리의 강분도, MK님께 감사드립니다. ^^

만약 안돼면… HANIRC서버의 #ubuntu채널의 고수분들깨 물어봅시다.

웹 호스팅에 눈길이 더 가는… +ㅂ+!!!
감사합니다.
삽학의 정도를 걷기위해 오늘도 삽질을…

PS: 무료호스팅이라고 해서 나오는 말인데… 외국계이지만 호스팅해주는 곳 리스트들…

http://www.co.cc/web_hosting/web_hosting_list.php

[quote="oming":1snkkmb0]xchat을 설치하셨다면…
다음은 스크린샷을 찍기위해서 스크린샷 프로그램(?)을 설치합니다.
스크립트에서는 imagemagic을 사용합니다.

Quote:
sudo apt-get install imagemagic

[/quote:1snkkmb0] 먼소리여 scrot 씀
sudo apt-get install scrot

너무 어려워요 ㄱ=

[quote="ctrl144":14ax41xs]너무 어려워요 ㄱ=[/quote:14ax41xs]
저 스크립트를 이해하는 것은 어려워도

그냥 복사해서 사용하는 것은 아주 아주 쉽습니다.

서버 주소, 아이디, 비밀번호만 정확히 대치해 주면 됩니다. ^^

물론 만드는게 어렵다는 것이죠…;;(언제쯤…)