上司のPCにイタズラしよう!
2011/9/26
Tag: bug,maya,mel,python,script
上司のPCを悪戯するのは部下の務めだと思うわけですよ。部下の鑑を目指すべく以前の職場で上司のPCのIMEの辞書に
「さま」→「さ○○○」、「ます」→「○○○」などと登録したのがバレて会議室に連れて行かれたikaです。
・免責事項
このエントリは上司に悪戯するという内容ですが、株式会社デジタル・フロンティア(以降、当社)はこれを推奨しているわけではありません。
当社及び筆者は、以下の内容を実行したことによるいかなる損害
(例えば、プロジェクトの進行を妨げたとか上司との関係が微妙になったとかその他諸々ですね)
の責任の一切を負いませんのであらかじめご了承下さいませ。
以下の内容を試す場合は自己責任でお願いします。
今回はMayaをリモートで操作する方法を紹介します。
○下準備
Mayaをリモートで操作するには「commandPort -name “:(ポート番号)”」をリモート操作されるMayaで実行しなければいけません。
Maya起動時に自動的にこのコマンドを実行出来ると良いですね。そんな時には「userSetup.mel」にコマンドを書き足せばOKです。
まずは上司のPCにログインして「userSetup.mel」を探します。ログインするときのユーザーは自分ので大丈夫です。そうWindowsならね。
「userSetup.mel」は↓にありますが、無い場合はココにテキストファイルを作ります。
(Windows)<ドライブ名>:\Documents and Settings\<ユーザ名>\My Documents\maya\<Version>\scripts
ヘルプの
ユーザ ガイド > 一般 > Maya の基本 > プリファレンスとカスタマイズ > 高度なカスタマイズ >
に詳しいことが書いてあります。
userSetup.mel に
1 | commandPort -name ":893"; |
と書き足します。
ファイアーウォールが有効になっていると他のPCからアクセス出来ないので、ファイアーウォールの例外にMayaが無ければ追加します。
ログアウトして上司がMayaを起動するのを待ちます。
○Mayaと通信するライブラリ
そんなモノは標準でついていないので自作します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | # MayaPipe.py import telnetlib class CMayaPipe : def __init__( self , host = '127.0.0.1' , port = 6666 ) : self .host = host self .port = port self .telnet = telnetlib.Telnet() self .bState = False self . open (host, port) def __del__( self ) : if self .bState : self .close() def open ( self , host, port) : if self .bState : self .close() print "trying to conect ..." self .telnet. open (host, port) print 'connected <%s : %d>' % ( self .host, self .port) self .bState = True def close( self ) : print 'closed <%s : %d>' % ( self .host, self .port) self .telnet.close() self .bState = False def pipe( self , command) : print 'pipe: ' + command self .telnet.read_until( '>>>' , . 5 ) self .telnet.write(command + '\n' ) raw = str ( self .telnet.read_until( '>>>' , . 5 )) return raw |
○リモートでMayaを操作してみる
とりあえずMayaにコマンドを実行させるものを作ります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # test_MayaPipe.py import sys import MayaPipe def main() : nArg = len (sys.argv) if 1 = = nArg : sHost = raw_input ( "host>" ) sPort = raw_input ( "port>" ) elif 2 = = nArg : sHost = sys.argv[ 1 ] sPort = raw_input ( "port>" ) else : sHost = sys.argv[ 1 ] sPort = sys.argv[ 2 ] mp = MayaPipe.CMayaPipe(sHost, int (sPort)) rtn = raw_input ( "cmd>" ) while "" ! = rtn : print mp.pipe(rtn) rtn = raw_input ( "cmd>" ) mp.close() main() |
コマンドプロンプトから実行するPythonスクリプトです。
MayaPipe.pyをPythonのパスが通っているところにコピーして以下のコマンドを実行します。(#は上司のPCのIPアドレスです。)
python test_MayaPipe.py ###.###.###.### 893
自分のPCで試す場合は、
python test_MayaPipe.py localhost 893
です。
MELコマンドを入力してEnterキーを押すと上司のMayaでコマンドが実行されるはずです。
試しに上司のMayaに球を出してみましょう。「sphere -r 5;」と入力して実行してみます。
上司のMayaに半径5の球が現れます。
多少驚く程度でまだリアクションが薄いので、上司が球を削除するのに合わせてもう一度コマンドを実行してみましょう。
二度目は半径を少し大きくしておくといいかもしれません。
この時注意して欲しいのは、上司が周りを見渡したときに目があわないように気を付ける事と、笑いを堪えるのも忘れないようにして下さい。。
いちいち一つずつコマンドを入力するのも手間ですし大掛かりな悪戯も出来ないので、ファイルにMELを書いて、それを実行してみましょう。
「PlayATrickOnTheBoss.mel」みたいなテキストファイルを作ってMELを書きます。
内容はビューポートに画像を表示するとかすぐ終了してすぐ削除出来るのが良いと思います。使う画像はエロ画像とか萌え画像とかだと喜んじゃうかもしれないので麗子像とかでいいと思います。
球を作ってこれが消されたらサイズを変えてまた作るみたいに延々と終わらないのはやめた方がいいと思います。自分がやられたら確実に殴りますね。
次に、このMELファイルを上司のPCからアクセスできる場所へコピーします。例えばサーバのスクリプト置き場など。
「source “(コピーした場所)/PlayATrickOnTheBoss.mel”;」と先程のスクリプトで上司のMayaにコマンドを送ります。
以上上司のMayaに悪戯する方法を書いてきましたが、実行したら必ずバレるので上司との関係が微妙な方はやらない方が良いでしょう。
コメント
コメントフォーム