5.1 文字色の一括変更


メモ帳などのテキストエディタで下記のような文字列を入力します。

Screen.ColorTable=[[0,0,0],[196,0,0],[0,196,0],[196,196,0],[0,0,196],[196,0,196], [0,196,196],[196,196,196],[128,128,128],[255,0,0],[0,255,0], [255,255,0],[0,0,255],[255,0,255],[0,255,255],[255,255,255]]

適当なファイル名で保存してサーバー選択ダイアログの変更したいエントリーを右クリックして「ファイルから設定変更」を実行して保存しておいたファイルを読み込みめば設定が変更されます。

この「ファイルから設定変更」で読み込まれるテキストフォーマットは、同じく右クリックで表示されるポップアップメニューの「ファイルにエクスポート」で保存される設定と同じです。エクスポートは、
すべての設定がファイルに書き込まれますのでメモ帳などで編集、コピーなどして上記文字色の設定以外でも変更が可能です。

また、「ファイルから設定変更」は、複数のエントリーを選択して実行することも出来ます。
バージョン2.18.7よりカラーのオプション設定で16色カラーテーブルを数値編集出来るようにしました。各RGBをダブルクリックすると変更できます。

また右クリックのポップアップメニューでクリップボードにタブ区切りのテキストでコピーします。Excelなどに貼り付けて編集してからクリップボード経由で貼り付けることもできます。



5.2 ログイン手順の自動化


Chat Scriptを設定するとログイン時に実行したいパスワード入力やコマンド実行などを記録して自動化することができます。

このChat Scriptとスクリプトのオプション設定スクリプトは、まったくの別物です。スクリプトは、プログラミング的な要素が非常に強い言語ですのでログインなどの自動化では、あまりお勧め出来ません。Chat Scriptは、指定した文字列を待って文字列を送信するだけに絞っていますが単純なログインなどの手順では、有効です。また、自動作成機能で最初にキー入力を覚えさせるだけで自動化することが出来ますのでプログラミングの知識も不要です。
チャットスクリプトの設定の「次回接続時にChatScriptを自動で作成する」にチェックして接続し自動化したい手順でキー入力を行ってください。その時にプロンプトになる文字列を表示しながらキー入力を記録しChat Scriptダイアログの「終了」をクリックまでの手順が自動で実行されるようになります。

接続を終了して再度Chat Scriptダイアログを表示すると初回のログイン手順が表示され右クリックでのポップアップメニューにて「すべてクリップボードへコピー」を選択すると下記のようなテキストがコピーされますのでメモ帳などで再編集することが可能です。

if "Password:" then "%P\r"
fi

記録された受信文字列は、正規表現に見合うように変換され送信文字列も「送信文字列の特殊文字」に一致した場合には、変換されます。上記の"%P"は、サーバーのオプション設定のPasswordと一致した為に自動で変換された特殊文字です。

このChat Scriptは、ログイン手順以外でもプロンプトと文字入力を記録するだけですので踏み台サーバー経由の単純なリレーログインも自動化することが可能です。
if "hoge<[0-9]+>" then "telnet localhost\r"
  if "User \(hoge): " then "hoge\r"
    if "Password: " then "hoge\r"
    fi
  fi
fi

5.3 文字表示が停止する


文字コードがEUCなどの場合にUTF-8やSJISコードを含む文書をcatなどで表示しようとした場合にC1制御文字($80-$9F)が働いて文字表示が停止し画面がフリーズしたようになります。

これはDCS($90),SOS($98),OSC($9D),PM($9E),APC($9F)が送られてくる文字をデータとしてST($9C)やBEL($07)が来るまでバッファリングしている為です。

ReGISやSixelなどのグラフィック表示などはDCSとして、RGBによる文字色設定やクリップボードへのアクセスはOSCとして実装されています。また、EUC文字コードではSS2($8E)を半角カタカナ指定などで使用します。

C1制御文字はESC A-_までの文字で置き換えることが出来ますので使用しない設定も可能です(DCS($90)は「ESC P」など)。その場合は、オプション設定、ターミナル、エスケープシーケンスの「?8454 C1制御文字を無視する」をチェックしてください。

不意にC1制御文字によるバッファリングが行われている場合に一定時間経過すると画面右上に(C)が点滅してそれをクリックするとキャンセルが出来るようにしています。またメニューの表示、リセット、ESCシーケンスリセットでも同様にキャンセルできます。

PS.Unix系のcatコマンドは、文書を表示するコマンドでは、ありません。標準出力に出力するフィルターでファイルなどを連結(catenate)する物です。表示するにはmore/less/lvなどを使用します。最近では、文字コードを自動で判別して表示しくれますので便利です。昔ながらの文字コード自動判別ならnkfが有名ですね。

5.4 Ctrl+Vでペースト


キーボードのオプション設定のキーコード「新規」でKeyCode「V」+CttをlチェックしてAssginStringにて「$EDIT_PASTE」とするとメニューのショットカットを定義することができます。

KeyCodeは任意で同時に押すキーは「Shift / Ctrl / Alt」から選んでください。




またキーモードとして「App / CKM / VT52」などあります、これはエスケープシーケンスにてキーのモードを変更した場合に発生するキーコードを変えることができます。

モード ONシーケンス 名称 OFFシーケンス 名称
App ESC = ESCPAM ESC > DECPNM
CKM ESC [ ? 1 h DECCKM Set ESC [ ? 1 l DECCKM Reset
VT52 ESC [ ? 2 h DECANM Set ESC [ ? 2 l DECANM Reset

あまりモードを意識する必要は、ありません。それぞれのモードがセットされていても
VT52<CKM<App<Shiftの優先順位で検索してコードを決定しています。

メニューのショットカットは、「$」から始まる文字列です。メニューの説明ですべてのキーワードを記載しています。設定されたショートカットは、メニューにて確認することができます。

また、予め設定されたショットカットとしてスプリットコマンドのShift+DOWNやCtrl+TABなどがありますが、それらもここで変更することができます。

5.5 SSH2でのユーザー認証


SSH2のユーザー認証方法としてpublickey/hostbased/password/keyboard-interactiveに対応しています。どの認証方法を許可するかは、サーバー側で決定しますのでクライアントとしては、どの方式を優先的に使用するかを決める必要があります。

これらのとこは、暗号方式だったり鍵交換、ホスト鍵などについても言えることでサーバーで許可された方式から任意の優先順位でクライアントが選択して使用します。

RLoginでは、暗号方式などの設定でSSHで使用できる暗号、検証、圧縮、鍵交換、ホスト鍵、ログインの優先順位の並び替えが可能です。

例えばログイン手順の公開鍵認証(publickey)よりパスワード認証(password)を優先したいならpublickeyよりpasswordを上に移動(Shift+↑)させることで設定することが出来ます。
また、passwordとkeyboard-interactiveは、サーバーの実装によって同じように見えますがRLoginは、passwordの場合、事前に設定れたパスワードがあれば自動で挿入しますがkeyboard-interactiveでは、何の入力を要求するかは、サーバー側が任意に決定できる為(パスワードとは限りません)必ずユーザーのキーボード入力を求めます。

keyboard-interactiveの場合は、サーバー設定の画面のPasswordを空白にすると接続前にパスワード入力を求められて入力しても後で無視される結果になりますのでダミーのPasswordを設定しておく必要があるかもしれません。

2.18.4からkeyboad-interactiveの初回には、保存されたPasswordを送信するようにしました。認証に失敗した場合は、再度ユーザーのキーボード入力を求めます。

5.6 SSHでの公開鍵認証


SSHで公開鍵認証を行うには、まず認証鍵を用意する必要がありサーバー管理者が用意される以外は、自分で作成します。

作成にはssh-keygenやputty、Tera Termなどでファイルとして作成する方法とRLoginが内部で管理する認証キーの設定による方法があります。

ファイルの場合には、扱えるファイル形式、暗号方式を確認する必要がありますが、サーバーのオプション設定の「SSH Identity Key」で直接指定することができます。※ここで注意するのは、指定するファイルは、秘密鍵を含む認証鍵ファイルです。公開鍵ファイルでは、ありません。

対応している鍵のファイル形式
opensslのPEM形式 ssh-rsa,ssh-dss
ecdsa-sha2-*
openssh独自形式 ssh-rsa,ssh-dss
ecdsa-sha2-*
ssh-ed25519
ssh.com ssh-rsa,ssh-dss
putty ssh-rsa,ssh-dss

RLoginが内部で管理する場合は、認証キーリストでチェックするだけでそのエントリーで複数の使用・不使用が選択できアクセストライ(上へ・下へで移動)も任意の順位で指定できます。
※内部で管理している鍵をファイルにエクスポートして「SSH Identity Key」で指定する必要はありません。二重に指定することになるだけです。

また、認証鍵もファイルからインポート(読み込み)や新規作成してすべてのエントリーで共通に管理することができます。認証鍵をレジストリやプライベートプロファイルに保存しますので注意が必要かもしれませんが、パスコードによる保護は、ファイルと同じです。

新規作成する場合の暗号方式ですが、RSA/DSA/ECDSA/ED25519から選択し、さらに各種方式の暗号強度を示すビットサイズを選択します。

- 256 384 521 768 1024 2048 4096 8192
RSA1/2 - - - -
DSA2 - - - - × × ×
ECDSA - - - - - -
ED25519 - - - - - - - -

まず暗号方式では、古いサーバーや互換性を考えるならRSAの2048ビットあたりが無難ですが暗号強度的に不満がありRSAの4096/8192なら計算速度的に不満があります。もしサーバーがopenssh-5.7以上ならECDSAの256ビット、openssh-6.5以上ならED25519が最近の暗号方式なので安全かもしれません。DSAは、互換性や暗号強度を考えると使用しないほうが無難です。
(追記:DSAは、openssh-7.0以降デフォルトで使用出来ません)

RLoginで管理するならED25519>ECDSA-256>RSA-2048の3つを作成してアクセストライさせれば古いサーバーでもどれかで認証せるような設定が可能です。

認証鍵が用意できれば次にそのペアとなる公開鍵をサーバー側の自分のホームにある設定ファイル「~/.ssh/authorized_keys」に新規・追加する必要があります。

外部ファイルの場合は公開鍵ファイルの内容を設定します。

cat id_rsa.pub >>~/.ssh/authorized_keys

RLogin内部の場合は認証キーリストのキーを選択して「公開鍵」をクリックしクリップボードに公開鍵を転送してから

cat >>~/.ssh/authorized_keys
「メニュー」「編集」「貼り付け」をしてEnter(改行)CTRL+D(eof)で設定します。

※authorized_keysファイルを新規作成する場合には、"chmod 600 authorized_keys"などでアクセスパーミッションを設定しないとサーバー側で怒られるかもしれません。(.sshディレクトリーも同様に"chmod 755 .ssh"などのgw/ow属性のオフがsshサーバーで確認されます)

※また、場合によっては、サーバー側のsshd_configの内容変更してパスワードログインなどを禁止する設定(PasswordAuthentication no)をしたほうが無難です。

※自分がどのような方法で接続しているかの確認は、「メニュー」「表示」「ソケットステータス」で確認することができます。

Kexs: ecdh-sha2-nistp521
Encode: zlib + aes256-ctr + hmac-sha2-512-etm@openssh.com
Decode: zlib + aes256-ctr + hmac-sha2-512-etm@openssh.com
UserAuth: publickey ecdsa-sha2-nistp256


5.7 ダイアログフォントを変更する


バージョン2.18.5からオプション設定などのダイアログで使用するフォントとサイズを変更できるようにしてみました。[メニュー][ヘルプ][ダイアログフォントの設定]

現在の設定では、WindowsXPを意識して「MS UI Gothic」の9ポイントを採用しています

Windows2000時代の名残なら「MS Pゴシック」の9ポイントが良いかもしれません。

※2.18.3以前の、標準の設定です
Windows7以降なら「Meiryo UI」の8ポイントを選択したら今時かもしれません・・・

※2.18.3以前のバージョンでWindows8や10のプレビューでオプション設定などの表示が縦長なのが気持ち悪いので調べてみた結果、自前で設定出来るようにするのが良いなと思い実装してみました・・・

5.8 TERM環境変数の設定


rlogin/telnet/sshでは、TERM環境変数をクライアントで設定してコンソールの動作を決める必要があります。このTERM環境変数は、サーバー側のtermcap/terminfoにエントリーが設定されている必要があり、歴史的に非常に難解で多数の物があります。

tmuxやGNU Screen、vimなどで画面の表示が崩れる、おかしな挙動などのほとんど原因は、このTERM環境変数に設定されたtermcap/terminfoのエントリーが実際の端末の動作と合わない設定がされている事が多いものです。さらにキーコードの設定などもtermcap/terminfo内でされておりキー動作がおかしいなどもこのTERM環境変数で起こります。

RLoginでは、出来るだけxtermの挙動と互換性を持つようにしていますがxterm-colorなどではEUCとの相性が悪い物がありますので注意が必要です(文字バンク1をVT100-GRAPHICに変更してしまう)

オリジナルの設定も出来るように「Terminal」「TERMCAP」(環境変数の設定)で用意していますが、残念ながらかなり難解でサーバー側で多く設定などもありお勧めできるような物ではありません。しかし完全な動作を望むなら設定するほうがよいかもしれません。

termcapの場合は・・・
sshd_configにAcceptEnv TERMCAPしてTERMCAP環境変数を送る

root権限ですべてのユーザーで使用するなら・・・
/etc/termcapを直接編集してcap_mkdbする

tertminfoの場合は・・・
tic rogin.ti

などですね・・・


デフォルトのRLoginオリジナルのtermcap/terminfoです・・・
rlogin-color:\
        :am:ut:xn:km:mi:ms:co#80:it#8:li#24:Co#256:pa#64:bt=\E[Z:bl=^G:\
        :cr=^M:cs=\E[%i%d;%dr:ct=\E[3g:cl=\E[H\E[2J:cb=\E[1K:ce=\E[K:\
        :cd=\E[J:ch=\E[%i%dG:cm=\E[%i%d;%dH:do=^J:ho=\E[H:vi=\E[?25l:\
        :le=^H:ve=\E[?25h:nd=\E[C:up=\E[A:vs=\E[?25h:dc=\E[P:dl=\E[M:\
        :as=\E(0:SA=\E[?7h:mb=\E[5m:md=\E[1m:ti=\E7\E[?47h:mh=\E[2m:\
        :im=\E[4h:ZH=\E[3m:mr=\E[7m:mk=\E[8m:so=\E[7m:us=\E[4m:\
        :ec=\E[%dX:ae=\E(B:RA=\E[?7l:me=\E[m:te=\E[2J\E[?47l\E8:\
        :ei=\E[4l:ZR=\E[23m:se=\E[27m:ue=\E[24m:\
        :is=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8:al=\E[L:kb=^H:\
        :kD=\E[3~:kd=\EOB:@7=\E[F:k1=\EOP:k;=\E[21~:F1=\E[23~:\
        :F2=\E[24~:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[15~:k6=\E[17~:\
        :k7=\E[18~:k8=\E[19~:k9=\E[20~:kh=\E[H:kI=\E[2~:kl=\EOD:\
        :Km=\E[M:kN=\E[6~:kP=\E[5~:kr=\EOC:ku=\EOA:ke=\E[?1l\E>:\
        :ks=\E[?1h\E=:op=\E[39;49m:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:\
        :IC=\E[%d@:SF=\E[%dS:AL=\E[%dL:LE=\E[%dD:RI=\E[%dC:SR=\E[%dT:\
        :UP=\E[%dA:r1=\Ec:rc=\E8:cv=\E[%i%dd:sc=\E7:sf=^J:sr=\EM:\
        :AB=\E[48;5;%dm:AF=\E[38;5;%dm:st=\EH:ta=^I:bs:kn#12:pt:ml=\El:\
        :mu=\Em:
rlogin-color, 
        am, bce, xenl, km, mir, msgr, cols#80, it#8, lines#24, 
        colors#256, pairs#64, cbt=\E[Z, bel=^G, cr=^M, 
        csr=\E[%i%p1%d;%p2%dr, tbc=\E[3g, clear=\E[H\E[2J, 
        el1=\E[1K, el=\E[K, ed=\E[J, hpa=\E[%i%p1%dG, 
        cup=\E[%i%p1%d;%p2%dH, cud1=^J, home=\E[H, civis=\E[?25l, 
        cub1=^H, cnorm=\E[?25h, cuf1=\E[C, cuu1=\E[A, 
        cvvis=\E[?25h, dch1=\E[P, dl1=\E[M, smacs=\E(0, 
        smam=\E[?7h, blink=\E[5m, bold=\E[1m, smcup=\E7\E[?47h, 
        dim=\E[2m, smir=\E[4h, sitm=\E[3m, rev=\E[7m, invis=\E[8m, 
        smso=\E[7m, smul=\E[4m, ech=\E[%p1%dX, rmacs=\E(B, 
        rmam=\E[?7l, sgr0=\E[m, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, 
        ritm=\E[23m, rmso=\E[27m, rmul=\E[24m, 
        is2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8, il1=\E[L, 
        kbs=^H, kdch1=\E[3~, kcud1=\EOB, kend=\E[F, kf1=\EOP, 
        kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, 
        kf4=\EOS, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, 
        kf9=\E[20~, khome=\E[H, kich1=\E[2~, kcub1=\EOD, 
        kmous=\E[M, knp=\E[6~, kpp=\E[5~, kcuf1=\EOC, kcuu1=\EOA, 
        rmkx=\E[?1l\E>, smkx=\E[?1h\E=, op=\E[39;49m, 
        dch=\E[%p1%dP, dl=\E[%p1%dM, cud=\E[%p1%dB, ich=\E[%p1%d@, 
        indn=\E[%p1%dS, il=\E[%p1%dL, cub=\E[%p1%dD, cuf=\E[%p1%dC, 
        rin=\E[%p1%dT, cuu=\E[%p1%dA, rs1=\Ec, rc=\E8, 
        vpa=\E[%i%p1%dd, sc=\E7, ind=^J, ri=\EM, setab=\E[48;5;%p1%dm, 
        setaf=\E[38;5;%p1%dm, hts=\EH, ht=^I, OTbs, OTkn#12, OTpt, 
        meml=\El, memu=\Em, 


5.9 フォントの設定


端末で表示されるフォントを設定する場合、まずスクリーンのオプション設定でフォントの大きさを決める方法を選択してからそれぞれの値を設定します。

一行あたりの文字数から
フォントサイズを決定
フォントサイズが可変で文字数が固定されます。
ウィンドウサイズを変更するとフォントが拡大・縮小します。

画面サイズの横の文字数を設定できます。(DECCOLSMなどのコントロールコートで制御される文字数も設定できます)昔のパソコンや端末では80文字固定が多く古いソフトなどでは、80文字を想定して作られていることが多かったと記憶しています
フォントサイズから一行
あたりの文字数を決定
フォントサイズが固定で文字数が可変されます
ウィンドウサイズを変更すると文字数が増減します。

縦のサイズをピクセル(画素数)で指定できます。2.19.1から括弧内でポイント換算した値を示すようにしていますが、ポイントでは端数となって整数では、表現できない値となってしまいます。X11が出てきた頃のxterm/ktermで画面の文字数が可変になったころ以降では、この設定が多いように思います。
フォントの縦横比を変更する
(標準2.0)
漢字などの場合、全角は、半角の倍の横サイズで表し全角は、縦横同じサイズ(昔の日本製パソコンは、そうですね)とした場合に半角は、横サイズの2倍が縦サイズで表すことになります。欧文フォントの場合には、そんな考えが無いので1.4や1.6などの場合があります。
次にフォントのオプション設定で使用するフォントの種類を設定します。これはISO2022に従った難解な方法で表示されるフォントセットが選択されますが、まずサーバーの仕様に従った文字セットを決定します。古い仕様のサーバーならEUC/SJISが多かったですが、最近ではUTF-8が多いように思います。サーバーのファイル名に使用される文字コードが選択の基本になるでしょう。shellやアプリケーションなどは、LANG環境変数で"ja_JP.eucJP"や"UTF-8"などに設定され利用しています。(接続時のデフォルト文字セットは、サーバーのオプション設定で行います)

文字セットのEUC/SJIS/ASCII/UTF-8を変更するとデフォルトの文字バンクが変更されますがコントロールコードで随時変更されます。このあたりのISO2022については割愛しますが、00-7Fまでの文字コードがGLに割り当てられたG0のフォントセットで80-FFがGRに割り当てられたG1のフォントセットとなります。(この仕組みは7ビットの文字コードで多言語の文字を表す為の物です)

表示したいフォントを変更するには、その仕組みを理解する必要がありますが、大まかにフォントセットのデフォルトのフォントを設定するだけでそれなりに十分です。注意点としては、文字幅が固定のFixedフォントを使用しないと表示が見づらくなります。「MS ゴシック」が固定幅で「MS Pゴシック」がプロポーショナル、可変幅のフォントとなります。

多言語の表示をしたい場合やASCIIで「\」が「¥」で表示されるのが気持ち悪い場合は、それぞれのフォントセットのフォントを設定してください。設定の指針としてフォントセットのリストでWindows Charactor Setによる判定を○×で表示しています。Xのフォントセットのフォントを設定するするようにすればよいでしょう。ただしCSetがDEFAULTの場合は、判定できません。

右の表示では、MS ゴシックでは、ARABICを表示できませんが、BALTICは表示できることを示しています。しかしWindowsの機能でARABICの場合は、勝手にフォントを変えて表示することになります。このWindowsの機能は、FontLinkと合わせてデフォルトフォントを欧文フォントなどにした場合やMS ゴシックでハングルを表示しようと場合にでも自動でフォントが置換されることになります。
各フォントセットの設定内容は、新規に追加するには重要ですが、"Font Face Name"でフォントの変更程度が望ましいと思います。表示の微調整で無理して合わせることも出来ますがあまり好ましい結果にならないことが多いです。しかし欧文フォントと漢字フォントをバランス良く合わせる場合は、漢字フォントをこの表示の微調整のHeight Zoomを小さくする(80~90%)のが良いと思います。欧文フォントを大きくすると文字種によって正しく表示されないでしょう。また欧文フォントは、比較的大きなベースラインを持っていますのでその場合は、漢字フォントのHeight Offsetを少しつけて(0~10%)調整します。

Font Face NameやFont選択で重要なのはWindows Character Setによって変化することです。上記でも示しましたがWindowsの機能で判定する基準になるのがWindows Character Setになります。これをDEFAULTにするとどの言語のフォントでも選択可能になりますが、判定ができなくなります。

また、2.19.2よりUNICODEのブロック設定でUTF-8時のUNICODEフォントセットをブロック単位で置換することができます。これも難解な設定ですが細かく表示するフォントを選択するには必要な設定になります。しかし基本的にISO2022の多言語の仕様とUnicode Blockの区分け基準の相性が非常に悪い為、設定が困難です。したがってUnicode Block Fontsetでは、サンプル表示を基準に使用するかどうを自身で判断するようにしています。

フォントセットのUNICODEエントリーのフォントを"Arial Unicode MS"や"Meiryo UI"など多くの文字に対応したフォントを選択しておいて日本語などの文字をブロックで指定するのが良いと思います。またUnicodeのAタイプ(Ambiguous)で定義された文字の表示幅もサンプル表示で点線で確認することができます。

SHIFTJISセットの"JIS X 0208-1978"をUnicode Blockに割り当てた例です。

U+002E80 JIS X 0208-1978 CJK Radicals Supplement
U+003000 JIS X 0208-1978 CJK Symbols and Punctuation
U+003040 JIS X 0208-1978 Hiragana
U+0030A0 JIS X 0208-1978 Katakana
U+003190 JIS X 0208-1978 Kanbun
U+0031C0 JIS X 0208-1978 CJK Strokes
U+0031F0 JIS X 0208-1978 Katakana Phonetic Extensions
U+003200 JIS X 0208-1978 Enclosed CJK Letters and Months
U+003300 JIS X 0208-1978 CJK Compatibility
U+003400 JIS X 0208-1978 CJK Unified Ideographs Extension A
U+004E00 JIS X 0208-1978 CJK Unified Ideographs
U+00F900 JIS X 0208-1978 CJK Compatibility Ideographs
U+00FE30 JIS X 0208-1978 CJK Compatibility Forms
U+00FE50 JIS X 0208-1978 Small Form Variants
U+00FF00 JIS X 0208-1978 Halfwidth and Fullwidth Forms
2.19.3から追加したISO646の文字設定では、デフォルトフォントに日本語フォントを指定した場合にASCIIなどで「¥」が表示されるなどの問題を設定することができます。

本来ならすべてのフォントセットで適切なフォントを指定すれば変更する必要がないのですが日本語フォントに残る「円記号問題」が表面に出るような設定を抑制することが出来ます。

現在の使用環境で欧文などは、ISO8859などが設定されてこのISO646が使用される環境が少ないと思いますが日本語では円記号として色濃く問題が残っています。7/14「~」「 ̄」に関しては、最近では「~」になっているようです。MS ゴシックなどでは、微妙な上チルダ「~」ですね。

デフォルトフォントやASCII(ANSI X3.4-1968)/ISO646-USに日本語フォントを指定した場合には5/12、7/14を変更してやる必要があります。5/12の候補としては、U+FF3C,U+2216がバックスラッシュに見えますがU+FF3Cのフルワイド文字は、表示が崩れます。

またJIS X 0201-Romanでは、7/14をU+203Eにすると古い環境で使用してたアッパーラインで表示するようになります。(古いキーボードは「 ̄」で、新しいキーボードは「~」ですよね・・・)

JP/USで指定できそうなUNICODEを下記に示します。

5/12 JP ¥
U+00A5
YEN SIGN

U+FFE5
FULLWIDTH
YEN SIGN
US
U+2216
SET MINUS

U+FF3C
FULLWIDTH
REVERSE SOLIDUS

U+FFFFF
"/"を鏡面表示
して代用
7/14 JP ¯
U+00AF
MACRON

U+203E
OVERLINE
US ˜
U+02DC
SMALL TILDE

U+223C
TILDE OPERATOR

U+FF5E
FULLWIDTH TILDE
ターミナルのオプション設定でフォントの関係のオプション一覧です。

拡張オプション一覧でのフォント関連の設定
8403 ボールド文字有効
ボールド文字無効
SGRで設定する太文字・高輝度を選択します
8428 Aタイプを半角で表示
Aタイプを全角で表示
UnicodeのAタイプ(Ambiguous)の文字幅を選択します
8437 漢字コードを自動追従 漢字コードを変更しない EUC/SJIS/UTF8を自動で追従して変更するようにします
8449 半角の調整をしない
半角の調整を行う
Fixedフォントで半角に収まらない文字を自動で縮小します
8451 罫線を文字で表示する
罫線を線で表示する
罫線文字を線描画で表示し正しくつながるようにします
各種オプションでのフォント関連の設定
462 ワード単位で調整
文字単位で調整する
プロポーショナルフォントの表示方法を選択します

5.10 通信ログの設定


通信ログの形式の補足説明です。

基本的にRAW<CTRL<CHAR<LINE<PAGEの順位で通信ログが見やすくなりますが正しく記録されなくなります。

2.19.4からLINEをPAGEに変更し、新たにLINEを追加しました。

長所 短所
RAW 通信した内容をそのままの形で記録します
通信ログとしては、最も正確です。受信したデータをそのままログファイルに書き出します。漢字コードも変換しません。 行編集した時の制御コードなどもそのままですので通信ログを参照する時に注意が必要です。(00-1Fのコードが含まれます)
CTRL 制御コードを<XX>の形で記録します
制御コードを文字列に変換してログが参照しやすくなります。ESCシーケンスなども略号に変換されます。漢字は、指定文字コードに変換されます。 行編集などで非常に長いログになり見づらくなります。
CHAR 一部の制御コードと文字を記録します
一部の制御コードを文字列に変換してログが参照しやすくなります。漢字は、指定文字コードに変換されます。 行編集の過程が省略されて記録されます。編集した行の結果が正しく記録されません。
LINE 行単位で記録します
変更された行単位で通信ログに記録されます。制御コードを一切含みません。行編集した結果の文字列が記録されます。漢字は、指定文字コードに変換されます。 行編集の過程が省略されて結果のみ記録されます。カーソル移動などした場合に正しい順位で行が記録されません。また記録されない行があります。
PAGE ヒストリー単位で記録します
※2.19.8で追加したターミナルのオプション設定8455の「スクロールして消去」を有効すると画面クリアで記録されない問題が解消されます。
ヒストリーに溢れた行を通信ログに記録します。結果、ヒストリーと同じ内容でログに書き出します。 すべての編集過程が省略されます。画面クリアなどで記録されない内容が多くなります。
DEBUG 送受信のデバッグログを記録します
送信・受信を区別してログに記録します。すべての通信データを記録できます。制御コードや漢字コードは、[XX]に変換されます。 非常に助長なログになります。また一部のデバッグ用のログも含みます。

5.11 ウィンドウの分割


[メニュー][ウィンドウ]で実行される[縦方向に分割][横方向に分割]などは、接続をする前に特定の形に分割して使用します。また次回から同じ分割で使用したいなら[現在の分割を保存]すればその形で起動するようになります。

この[ウィンドウ][縦・横方向に分割]で作られるウィンドウは、接続を閉じても分割を維持します。またすでに接続中の重なったウィンドウで分割すると空のウィンドウでなく重なったウィンドウを分割します。

例えば3分割された状態で3つを選択して接続するとそれぞれのウィンドウで接続していきます。接続後にタブのドラッグをすればその接続を任意のウィンドウに移動させることができます。また、常にこの状態で起動したいなら[ファイル][すべての状態を保存]し、次回から保存したファイルを選択すれば、その状態で接続して起動します。

[ウィンドウ][スプリットコマンド]の[縦・横方向に分割して接続]などは、後から任意の形に分割してサーバーに接続することを想定しています。これは、[縦・横方向に分割][サーバーに接続]を行い、接続を閉じるとウィンドウの[分割を閉じる]と同じような動作を行います。

任意の形でその時々に同じサーバーに別ウィンドウで接続しで作業などの用途に適しています。
また、これらの動作は、マウス操作ではなく、ショートカットキーで作業したほうが楽なのでスプリットコマンドには、すべてショートカットをデフォルトで割り当てています。


スプリットコマンドで上記と見た目に同じ状態で分割した場合には、
3つめの接続を閉じるとウィンドウも閉じます

5.12 スクリプトのサンプル


接続後、特定のコマンドを実行します。

ポイント:
スクリプトは、接続前から実行されます。接続後の処理を行うには最初の2行が必要です。
文字入力待ちを行うには、sleep(100)で待つより表示が落ち着くwhile ( sgets(100) != "" );で待つ方が無難かもしれません。意味的には文字入力が100msec空くまで待つになります。
Document.Open();
wait(CONNECT);

sopen(OPEN_LOOK);

while ( sgets(100) != "" );
sputs("pwd\r");

while ( sgets(100) != "" );
sputs("ls -la\r");

while ( sgets(100) != "" );
sputs("ps ax\r");

sclose();
メニュー「ウィンドウ」の「別ウィンドウを開く」の上に「新規に現在の接続を開く」メニューを追加します。

別のRLoginを起動して現在の接続をコマンドライン指定で開きます。

ポイント:
menu関数で任意の位置に新たにメニューを追加できます。
System変数やDocument変数に必要な情報があれば簡単です。

menu(0, "新規に現在の接続を開く", "OtherOpen", "$WINDOW_NEW");

function OtherOpen() {
    shellexec(System.FullPath, Document.CmdLine, System.WorkDir);
}
メニュー「ウィンドウ」「スプリットコマンド」「画面分割無しで接続」の上に「画面分割無しで接続して移動」を追加しショートカットキーCtrl+Alt+LEFTを設定します。

接続中のサーバーに「pwd」コマンドを送ってカレントディレクトリーを取得し「画面分割無しで接続」を実行し新しく開いた接続で「cd」コマンド先に取得したカレントディレクトリーに移動します。

ポイント:
System変数のグローバル性でトリッキーな動作になります。
menucall関数で任意の動作をスクリプトから呼び出せます。
if ( System.pwd != "" ) {
    Document.Open();
    wait(CONNECT);
    sopen(OPEN_LOOK);
    while ( sgets(100) != "" );
    sputs("cd " . escshell(System.pwd) . "\r");
    sclose();
    System.pwd = "";
}

menu(0, "画面分割無しで接続して移動", "SplitDups", "$SPLIT_OVER");
Document.KeyCode.Add(37, 6, "$SCRIPT_MENU1");

function SplitDups() {
    sopen(OPEN_LOOK);
    sputs("pwd\r");
    sgets(300);
    System.pwd = trim(sgets(300), "\r\n");
    sclose();
    menucall("$SPLIT_OVER");
}
メニュー・ファイル・アプリケーションの終了の上に「タスクバーにアイコンで格納」を追加します。
収納後は、アイコンをダブルクリックで元に戻どります。

sshでポートフォワードのみ行うような接続を常駐させる場合などに使えるかもしれません。

ポイント:
iconstyleの引数は、任意文字列です。タスクバー上のアイコンにマウスを乗せると表示される文字列になります。サンプルでは、接続のエントリー名を設定しています。

function TaskIcon() { iconstyle(Document.Entry); }

menu(0, "タスクバーにアイコンで格納", "TaskIcon", "$EXIT");
接続前にホスト選択ダイアログを表示して接続先を変更する。



ポイント:
dialog関数のデザインは、面倒ですが上手に使えば美しい?ダイアログが作成できます。
dlg = dialog("Host Select", [ 0,0,200,180 ],
 [
  [ "radiotop", [ 30,10,100,20 ], "192.168.1.1" ],
  [ "radio", [ 30,30,100,20 ], "192.168.1.2" ],
  [ "radio", [ 30,50,100,20 ], "192.168.1.3" ],
  [ "radio", [ 30,70,100,20 ], "192.168.1.4" ],
  [ "button", [ 50,120,100,20 ], "OK", 0, "OnClickOk" ],
 ]
);

dlg.open();
dlg.center();
dlg.show(1);
dlg.wait();

function OnClickOk(id) {
  if ( (n = dlg.getradio(0)) >= 0 )
    Document.Entry.Host = dlg.gettext(n);
  dlg.close();
}

5.13 SSH2での各種選択


プロトコルのオプション設定にある暗号方式などの設定にはSSHバージョン2で使用できる多くの設定がありその優先順位が指定できます。各種アルゴリズムについてセキュリティや速度について誠に勝手ながらその指標をつけてみました。

※指標が○ばっかりだとややこしさが同じなので◎を付けましたが、無難な選択の1つ程度とお考えください。またopensshのバージョンによってデフォルトで使用できなくなったり追加された物を明記するようにしてみました。

鍵交換
ホスト鍵の交換で使用するクライアント鍵の種類と計算桁数に相当するビットサイズおよびハッシュ関数を選択します。ビットサイズは大きければセキュリティが高くなりますが、計算速度が遅くなる傾向にあります。またハッシュ関数のデータサイズもビットサイズと同じように大きければ安心ですが速度が遅くなります。現在ではハッシュ関数のsha1は脆弱さを指摘され推奨されなくなっています。
diffie-hellman-group1-sha1 検証する為のビットサイズが小さくハッシュ関数がsha1で推奨されていません。
※openssh-6.7から使用不可です。
×
diffie-hellman-group14-sha1 実用的な計算量だと思いますがハッシュ関数がsha1で推奨されていません。
diffie-hellman-group14/16/18-
sha256/512
上記のsha2版になりビットサイズも選択種が増えた物です。
※openssh-7.3より使用可能です
diffie-hellman-group-exchange-sha1 ハッシュ関数のsha1が推奨されていません
※openssh-6.7から使用不可です。
×
diffie-hellman-group-exchange-sha256 暗号方式やパケット検証に使われる方式によりビットサイズが増減し比較的計算量が多いので速度的に不満があります。
ecdh-sha2-nistp256/384/521 256/384/521でデータサイズが増えますが計算速度差が少ないように思います。
※openssh-5.7より使用可能です。
curve25519-sha256@libssh.org 最近の方式なのでセキュリティが未知数の部分がありますが署名・検証の計算が非常に速いです。
※openssh-6.5より使用可能です。

ホスト鍵
サーバー側が持っている複数のホスト鍵からどれを使用するか選択します。SSHでの公開鍵認証で使用するユーザー鍵と同じだけ種類があります。これは、上記鍵交換にて検証する鍵になりますが、種類やビットサイズにより計算速度がかなり違います。接続からログインまでの時間がホスト鍵とクライアント鍵の署名・検証で決まり、ログイン認証がユーザー鍵の署名・検証の処理時間になります。
ssh-dss 現在では、ホスト鍵として使用するのは、まったく推奨されていません。
※openssh-7.0から使用不可です。
×
ssh-rsa ビットサイズが2048以上の物が推奨されているようです。4096以上では計算量が非常に多くなります。
rsa-sha2-256/512 署名・検証にするハッシュ関数が拡張された物で鍵自身は、まったく同じです。
※openssh-7.3より使用可能です。
ecdsa-sha2-256/384/521 比較的最近の方式ですが現在では、多くのサーバーで対応が進んでいると思います。
※openssh-5.7より使用可能です。
ssh-ed25519 最近の方式なのでセキュリティが未知数の部分がありますが署名・検証の計算が非常に速いです。
※openssh-6.5より使用可能です。

暗号方式
暗号に用いる方式、計算する時のビットサイズ、符号化方法などさまざまな要因でセキュリティおよび速度が選択できます。速度については暗号方式などの設定で記載しています。
arcfour/256/512 速度的には、圧倒的に速いですが、脆弱性があるようで推奨されていません。安全性より速度の場合には、有効です。
aes128/192/256-ctr 現在では、多くのサーバーで採用されいるようで比較的、速いと思います。とりあえずこれの1つです。
aes128/256-gcm 暗号と検証を1つにしたもので検証を含めると速度的に優位かもしれません。
chacha20-poly1305 最近の方式なのでセキュリティが未知数の部分がありますが暗号・検証の計算が非常に速いです。
*-cbc 脆弱性があるようで現在は非推奨になっています。 ×

検証方式
データパケットの検証を行う方式です。あまり計算量の多い物より速度的な優位性で選択するほうが良いように思います。セキュリティの意味合いよりデータの正当性を確かめる為の物だと思います。
umac-32/64/96/128 crcで検証する方式で速度的には、非常に優位です。さすがに32ビットは、小さすぎると思いますが・・・
hmac-md5 無難な検証方式かもしれません。
hmac-sha1 必要十分な速度、サイズと思います。
hmac-sha2-256/512 最も、安全性の高い検証方法だと思いますが、速度的には計算量が多いかもしれません。
*-etm@openssh.com パケットサイズの暗号と含めて検証する方式です。


5.14 マウスによる範囲指定


マウスの左クリック(文字単位)/左ダブルクリック(文字列単位)による範囲指定は、左ボタンを放すまでキーボードのShift(行単位)やCtrl(矩形範囲)との併用などで随時変更するこが出来ます。

一般的には、マウスのクリック時にShift/Ctrl/Altをチェックして範囲方法を決定することが多いようですが、RLoginではマウスボタンを放した時点で決定しています。
ドラッグ中にCtrlキーを押すと矩形範囲に変更します ドラッグ中にShiftキーを押すと行選択に変更します
マウスをウィンドウ外に移動すると行選択に変更します
また、通常のマウスカーソルの形状を変更することも可能です。
マウス関連のオプション設定
452 カーソルをIで表示 カーソルを通常表示

5.15 外観の設定


メニューバーやツールバー、タブバー、ステータスバー、スクロールバーなどは、表示・非表示を設定することが出来ます。

端末のサイズをなるべく大きくしたい場合などは、必要性の低いものを非表示すると良いでしょう。
最小限メニューバーがあれば、すべてのコマンドを実行できますが、必要最小限のツールバーをカスタマイズするのも良いかもしれません。
メニューバーを非表示にした場合は、タイトルバーのアイコンをクリックしてシステムメニューからメニューバーの表示・非表示を変更することができます。

また、キーボードのオプション設定でショートカットでメニューバーの表示・非表示を切り替えたら便利かもしれません。

以下の例では、Alt+Mでメニューバーを表示・非表示します。

5.16 SSHによる多段接続


単純なコマンドラインによる多段接続(ログインしてからsshやtelnetコマンドで別のサーバーに接続)ならログイン手順の自動化で設定するのが簡単ですがポートフォワードの設定で多段接続した場合は、ローカルネット上のsshサーバーに対してsftpなどが実行できるメリットがあります。(コマンドラインで接続した場合にsftpなどを実行すると踏み台サーバーにアクセスします)

※コマンドラインで接続する場合、すべてsshサーバーで公開鍵認証ならserverAの設定でエージェント転送を有効にするにしておけば認証を簡素化することも出来ます。(ssh -A localBですね)

※踏み台となるサーバーでシェルの実行が不用ならポートフォワードだけ行うをチェックすればポートフォワードのログが表示されるようになります。
踏み台となるserverAの設定では、まず通常に接続できる事を確認した上でポートフォワードの設定を行います。ここで注意するのはエントリー名で任意の名前ですが下記の前接続先で指定するエントリー名になります。

ローカルネット上の複数のサーバーに接続する場合は、下記のようにLocal Socksをlocalhost(RLoginを実行しているパソコン)に2022ポート(番号は任意)で開くのが便利かもしれません。

ListenedでLocal Socksを指定した場合は、ConnectのHost Name/Portは、意味を持ちません。Socks Client側で指定されるサーバーに置き換わります

注意事項としては、ListenedのHost Nameにlocalhost以外のWindowsパソコンのグローバルIPを指定した場合は、RLoginを実行しているパソコンに外部からでもアクセス可能になってしまいます。通常は、ファイアーウォールで禁止されると思いますが注意が必要です。



ローカルネット上のサーバーが1つの場合(localB or LocalC)には、下記のようにしたほうが簡単ですが、自由度がかなり低くなりあまりお勧めできません。この場合下記のlocalB/Cの設定でProxry Serverの指定が不用でServer Address/Portがlocalhost/2022になります。


ローカルネット上のlocalB/localCの設定では、Server Addressでローカルネット上の名前を指定します。DNSで名前を解決するのは、serverAが行います。ここで注意するのは、Proxy Serverの設定でSOCKS5を選択することです。SOCK4では、192.168.xxx.xxxなど数値でIPv4の指定しか出来ませんのご注意ください。(SOCK4では、クライアント上のDNSで名前を検索します。これでは、今回のように接続先のローカルネット上の名前は、検索することが出来ません)

また、タブ/前接続先の下段に先に設定した「serverA」のエントリー名を指定すれば、localBに接続するだけで自動的にserverAに接続してからlocalBに接続します。この場合は、別のタブでserverAとlocalBが開きますが、事前にserverAに接続したRLoginを起動させておくと同じRLoginの別タブで開かずに済みます。



5.17 罫線が表示されない


最近、tmuxで水平線は、表示されるが垂直線が表示されないとの報告がありました。調べてみると興味深い状況だったのでまとめてみようと思います。

まず、罫線文字ですが歴史的に文字をハードウェアで表示していた時代は、完全に機種依存する形でしか表示できませんでした。言い換えれば、標準規格化されなかった文字です。したがって各社が適当に空きコードに割り当てていた為、端末での互換性がありません。

日本では、JIS X0208-1983で罫線素片として規格化されました、使用に関しては、機種依存が激しい(それまでに各社が勝手にJISの空きに割り当てていた)のと全角文字で定義してあったので使いにくかったと記憶しています。

RLoginでは、半角文字の罫線としてPC-ATの名残のIBM437-GRとTera Termで付属されているTera SpecialフォントをVT100-GRAPHICとして使用できるようにしています。

TERM環境変数によるtermcap/terminfoのas/ae,smacs/rmacsにより文字バンクを切り替えて罫線を表示するの方法が多くなったと思っていました。

しかしtmuxでは、LANG環境変数がEUCやSJISでは、termcap/infoに従った文字バンク切り替えで罫線を表示しているようですが、LANGがUTF-8の場合は、Unicodeの罫線を使用するようでこれが垂直罫線が表示されない問題になっていました。

Unicodeの罫線U+2500(Box Drawing)ですが、これがかなりの曲者で先の機種依存の罫線文字を寄せ集めて再定義したようで、文字の横サイズがバラバラになっています。日本語フォントに依存する罫線は、全角でIBM437-GRに依存する文字は、半角です。

実際にUnicodeのEastAsianWidth.txtで罫線文字は、Aタイプ(Ambiguous/曖昧・不明瞭な)で定義された文字の表示幅とされています。たしかに欧文のフォントでは、ほとんどが半角で日本語フォントは、全角で表現されています。日本語のSJISで書かれた罫線を含む文書をUTF-8に変換して表示した場合に正しくつながるようにするには、全角である必要があります。

RLoginでは、そのUnicodeのAタイプの文字をどのサイズで表示するかを設定できるようにしています。ターミナルのオプション設定の8428(Aタイプを半角で表示/Aタイプを全角で表示)がその設定になります。

たしかにアプリケーションでLANG=UTF-8の場合に文字バンク切り替えを使用するよりダイレクトにUnicodeで罫線を表示したほうが互換性などを考えると合理的に思えます。日本語のフォントを主体で考えると今回のように問題になりますが、世界的には、標準になりそうな気がしました。

したがってRLoginの2.21.2から8428(Aタイプを半角で表示/Aタイプを全角で表示)をデフォルトONに変更し罫線などの文字を半角で表示するようにしました。SJISなどと互換性が必要な表示が必要な方は、ご注意ください。特に日本語フォントを使用した場合には、右上の例のように「αβγ・・・」の表示が崩れます。(時代の流れが変わったと思います・・・)

※漢字コードがUTF-8の環境でEUCやSJISの文書を正しい文字幅で表示したい場合はUTF-8に変換(nkf -W)するよりISO-2022-JPに変換(nkf -J)したほうが正しい文字幅になります。
SJISなどの罫線を含む日本語文書をUTF-8で正しく表示するには、
8428をOFF(Aタイプを全角で表示)にする必要があります。



最近のUTF-8で罫線を表示するには、
8428をON(Aタイプを半角で表示)にする必要があります。


5.18 ファイル転送


メニュー・ファイル・XYZModemファイル転送にある各種ファイル転送プロトコルは、パソコン通信を経験された方には、馴染みのある物ですが、現在のリモートサーバーに端末接続した場合にでも十分に使用できる便利な機能です。(さすがにXYModemは、古い仕様すぎて使用に耐えませんが・・・)

現在のFreeBSD/Ubuntu/CentOSなどでもプログラムをインストールさえすれば簡単に使用できます。

FreeBSD
pkg install kermit-9.0.302
pkg install lrzsz-0.12.20_4

Ubuntu
apt-get install ckermit
apt-get install lrzsz

CentOS
yum install ckermit
yum install lrzsz

※コマンドの頭にsudoを指定してroot権限でのインストールが必要な場合があります

ソースからインストールするなら下記のページから可能です。
http://www.columbia.edu/kermit/index.html
https://ohse.de/uwe/software/lrzsz.html

ckermitなどがKermitプロトコルでlrzszがXYZModemプロトコルのプログラムです。どちらも同程度の速度と性能ですが、Kermitの方が細かいオプションを利用できます。

また、FreeBSD用のBPlusプロトコル用のプログラムを昔に作成しました。これも好みの問題程度の差しかありませんが、利用可能です。

bp.tar.gz
サーバー上のファイルをローカル(RLoginを実行しているWindowsパソコン)に転送することをダウンロード、逆にローカル上のファイルをサーバーに転送するのをアップロードとすると・・・(サーバー側から見ると逆になるのでややこしい言い方になります)

Kermit ZModem BPlus
ダウンロード kermit -s <filename> sz <filename>
lsz <filename>
bp -u <filename>
アップロード kermit -r rz
lrz
bp -d

オプション設定の通信共通の「BPlus/ZModem/Kermitファイル転送を有効にする」をチェックしておけばコマンドを実行するだけで自動でファイル転送プロトコルが動きます。この場合には、アップ・ダウンなど転送方向なども気にする必要もありません。(Kermitは、多少、自動起動が遅いようですが・・・)

Kermit/ZModemの場合、手動で起動するには、メニュー・ファイル・XYZModemファイル転送・Kermit/ZModemダウン・アップロードを実行です。

また、マウス操作でファイルをドラッグ&ドロップするだけでファイルのアップロードも可能です。
この場合、コマンドをサーバー側に送信しますので注意が必要です。



tmuxやGNU Screenなどを使用している場合には、ファイル転送プロトコルは、使用できません。
これは、入力・出力が内部で変換されてしまう為で端末では、制御のしようがありません。

小さなサイズのファイルならば、OSC 1337の機能を使用してサーバーからローカルにダウンロードすることが可能です。あまり大きなサイズのファイルは、すべてメモリ上で展開しているので苦しいです。さらに途中経過などの表示もしないのでハングアップしたように見えます。

右のシェルスクリプトでは、tmuxの場合には、DCSでパックするようにしています。
#! /bin/sh

for n in $*
do
  if test $TERM == screen* ; then
    printf "\033Ptmux;\033"
  fi

  printf '\033]1337;File=name=%s;inline=0:' `echo -n $n | base64`

  base64 $n

  printf '\007'

  if test $TERM == screen* ; then
    printf '\033\\'
  fi
done