カテゴリーアーカイブ OS

takahashi 著者:takahashi

macOS Mojaveでとにかく簡単に多段SSHしたい! -SSH Tunnel Manager編-

前回の記事でmacOSでも簡単にSSHTunnelをできるようにしたいと探した結果、Coccinellaというアプリを発見し、試しては見たものの残念ながらmacOS Mojaveではうまく動かなかった…という話をご紹介しました。

今回は、いろいろ探していて見つけたもう一つのSSHTunnelアプリ”SSH Tunnel Manager“を試してみたいと思います。

起動するとこんな画面が出てきます。

まず、設定画面左下の+ボタンを押して、新しい項目を追加します。

nameには何のサーバーかわかりやすいような名前、Loginは踏み台サーバー側のユーザーid、Hostはホスト名、Pirtにはポート番号をそれぞれ指定します。

今回はlocalhost経由で目的のサーバーにつなげる設定(例えば127.0.0.1:1222につないだら踏み台サーバー内のネットワークの192.168.0.110:22に転送する)にしたいので、画像のように設定値を入れていきます。

少しわかりづらいですが、左側のportがlocalhostにマッピングするポート番号、IPと右側のportには接続先サーバーの情報を入力します。

また、Optionsボタンを押すと詳細な設定を行うことができます。

この辺りは使用しているサーバーの設定やお好みに合わせて設定してください。
ちなみにsocks4によるプロキシも利用できるようです。

設定が完了すると、こちらのウインドウに接続先サーバーが追加されます。

項目の右側にある”Start”をクリックすると、接続処理が開始されます。

Coccinella同様に通知領域に追加することも可能で、その場合は通知領域にあるアイコンをクリックして表示されるコンテキストメニューから接続することも可能です。

なお、秘密鍵を使った接続の場合は、あらかじめ.bashrcなどに”ssh-add”コマンドを記述して秘密鍵を事前にインポートするように設定しておく必要がありそうです。

それでは早速接続してみます。

とりあえず、接続はうまく行った模様。
後はほかのアプリケーションから接続できるかですが…

おおおバッチリ繋がりました…!!!
特に接続が切れたりすることもなく、安定した接続を行うことができました。

今後家のサーバーにアクセスするとき、これでmacOSからも踏み台サーバーを意識することなく使うことができそうですε-(´∀`*)ホッ

macOSからの多段接続にお困りの方はぜひ試してみてください。

  • この記事いいね! (0)
村上 著者:村上

【Excel】棒グラフの目盛りを0始まりにする方法

横棒グラフを扱っているとき、たまに 横軸の目盛りが0から始まらないグラフがあったのでその対処法について。
ちなみに、Excel のバージョンは Excel 2013 です。
というか、そもそもなぜこの現象が発生するのか…それについては現在調査中です。
Excelさんのありがた迷惑な自動補正だったりするのでしょうか…?

 

さて、目盛りの修正方法ですが、まずメモリを修正したいグラフを選択します。
そうすると、下の画像のようにプラスのメニューボタンが現れると思うので、そこから 軸 > その他のオプション を選択します。

オプションを選択すると、下の画像のようなメニューが画面右に現れると思います。

そうしたら、このオプションの「境界値」から「最小値」を 0 に変更します。
作業としては以上で終了です。
グラフにもこの変更が反映され、正しいパーセンテージでグラフが表示されているかと思います。

 

以上、Excelで作成したグラフの軸の目盛りが0始まりでない時の対処法でした。
グラフの割合がおかしい!というときには、まずこちらの方法で目盛りの最小値を確認してみることをおすすめします。

  • この記事いいね! (0)
takahashi 著者:takahashi

macOS Mojaveでとにかく簡単に多段SSHしたい! -Coccinellida編-

以前、Windowsでは簡単に多段接続したファイルのやり取りができるソフト”WinSCP”をご紹介しましたが、自分はmacOS(Mojave)も使っているので同じことを実現したいなーと思っていました。

しかし、macOSはWindowsと打って変わって、多段接続に対応したアプリがなかなか見つかりません。

もっともmac自体にはもともとOpenSSHクライアントがインストールされているので

ssh -v -N  -L ローカルホストのip1:ローカルホストのポート1:接続先ホストのip1:接続先ホストのポート1 [-L ローカルホストのip2:ローカルホストのポート2:接続先ホストのip2:接続先ホストのポート2 -L ローカルホストのip3:ローカルホストのポート3:接続先ホストのip3:接続先ホストのポート3 -L ...] -o ConnectTimeout=15 -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -o TCPKeepAlive=yes [-i 公開鍵認証の場合は秘密鍵のパス ] -p 踏み台サーバーのsshポート 踏み台サーバーのホスト
#※[]部分は必要な時のみ入力

のようにすれば繋がるのですが、毎回こんなコマンドを打つのはめんどくさい…

とりあえず上のコマンドをシェルスクリプトにし、パスの通っているディレクトリに置いたので、コマンド一発で繋げられるようにはなりましたが、Windowsでの利便性と比較すると、ターミナルを開いてコマンドを打つのですら正直めんどくさく感じます。
どうせならVPN見たくGUIからワンクリックでサクッとつながってほしい…と思い、いろいろ探した所、よさげなアプリを発見しました。

Coccinellida

その名も英語で”てんとう虫”を意味する”Coccinellida”

起動するとタスクバーに常駐するので、右クリックからPreferenceをクリックして設定画面を表示。

Tunnelsタブを開くと接続先サーバー設定が表示されるのでaddをクリック

Generalタブには踏み台サーバーの接続情報を入力し、

Port Fowardingタブで踏み台サーバーの先の目的のサーバーへの接続情報(IP・ポート)と紐づけるローカルホストのIPとポートを入力していきます。

設定完了後、設定画面を閉じ、再度通知アイコンを右クリックすると、先ほど追加した接続情報が追加されているので、クリックすれば自動でSSHポートフォワーディングが開始されます。

通知にestablishedと出てきたので、これで繋げられる…!
…と思ったのですが、試しにTerminalから踏み台先のサーバーへつなげようとしても、”ポートが開いていない”という旨のエラーが出て、接続できません。

他のアプリでも接続を試してみましたが、目的のサーバーに接続することはできませんでした。

調べてみるとCoccinellidaは2015/11/25以降アップデートされておらず、Sierra以降はCoccinellidaを使ってSSHTunnelすることはできなくなってしまったようです。

macOS10.12 Sierra でトンネル接続 – Digital Boo

その代わり上記の記事でCoccinellidaとは別のSSHTunnelソフトSSH Tunnel Managerを見つけました。

次回はこのSSH Tunnel Managerで接続できるか試してみたいと思います。

  • この記事いいね! (0)
takahashi 著者:takahashi

bashシェルスクリプトで引数の取得と空文字を判定する方法

以前村上さんが 【備忘録】MacのFinderで隠しファイル・フォルダを表示する方法 という記事を投稿されてましたが、自分の場合はこちらの内容を参考に簡単に切り替えれるようにシェルスクリプトでon offをできるようにしています。

とりあえず簡単に作ったのでめっちゃ簡素です(;´∀`)

#!/bin/bash

echo 'please type "true" or "false": '
read com

if [ $com = "false" ]; then 
  defaults write com.apple.finder AppleShowAllFiles FALSE
  killall Finder
  echo "隠しファイルが非表示になりました。"
fi

if [ $com = "true" ]; then
  defaults write com.apple.finder AppleShowAllFiles TRUE
  killall Finder
  echo "隠しファイルが表示されました。"
fi

exit 0

シェルスクリプトを作るとき、とりあえず簡単に作っておこうと思って

コマンド実行->隠しファイルの表示、非表示(true or false)を入力

という作りにしたのですが、これだけの操作でわざわざ2段階にする必要ないよなぁ、と思い、

コマンド true
コマンド false

でできるようにしようと思いました。

bashのシェルスクリプトで引数を認識させるのはとても簡単で、

コマンド 引数1 引数2 ... 引数n

とした場合に、引数の値をとる場合は

引数1: $1
引数2: $2

引数n: $n

という変数でそれぞれ取ることができます。
(引数10個目以降の引数の取得については${10}といった書き方をする必要があるようです。)

ただ、折角コマンド内で入力を読み込む処理も書いてあったので、今回は引数が何も入力されなかった時に、従来のtrue or falseを質問するプロンプトを表示するように変えてみました。

ここで”何も入力されなかった”、つまり空文字を判定する必要が出てきます。

PHPなどでは

//もし空だった場合
if($hoge == "")
{ 
    /*処理*/ 
}

みたいに書きますが、bashの場合は

#hogeが空だった場合は処理を実行
if [ -z "$hoge" ]; then
  #処理
fi

と書きます。
ちなみに、”空でなかった場合”に処理をさせたい場合は

#hogeが空でなかった場合は処理を実行
if [ -n "$hoge" ]; then
  #処理
fi

と書けばよいそうです。

これを踏まえてこんな感じに変更してみました。

#!/bin/bash

com=$1 #引数取得

if [ -z "$com" ]; then #もし引数に値が入ってなければ
  echo 'please type "true" or "false": ' 
  read com #再入力を要求
fi

if [ $com = "false" ]; then #"false"が指定されたら
  defaults write com.apple.finder AppleShowAllFiles FALSE #finderで隠しファイルを隠すコマンドを実行
  killall Finder
  echo "隠しファイルが非表示になりました。"
fi

if [ $com = "true" ]; then #"true"が指定されたら
  defaults write com.apple.finder AppleShowAllFiles TRUE #finderで隠しファイルを表示するコマンドを実行
  killall Finder
  echo "隠しファイルが表示されました。"
fi

exit 0

この内容をテキストファイルとしてユーザーがアクセスできる場所(例えば/usr/local/bin/ とか /opt/ とか)に保存し、”chmod +x”などを行って実行権限を与えておきます。
これでお手軽隠しファイル表示/非表示コマンドの完成です。

bashなどのシェルが使える環境では、こういったシェルスクリプト(バッチファイル)を作っておくことで、複数のコマンドを打たないといけないような操作を1コマンドで済ませたりすることができるようになります。

便利なので是非活用してみてください。

  • この記事いいね! (0)
takahashi 著者:takahashi

Windows 10のデフォルトブラウザがEdgeからChromeベースの新ブラウザに変更されるという噂

最近Winodws 10のフィードバックHubから
“Google Chromeを友達に勧める可能性はどれぐらいありますか”
というような質問が提示されて、
(あんなにEdgeを推してたのに、急にどうしたんだろう…)
と思ってました。

関係があるかわかりませんが、ネットのニュース記事でこんな話題が流れてきました。

Microsoftが「Chromium」ベースの新ブラウザ「アナハイム」を開発中か – Gigazine

なんとMSは、現行のEdgeの推進をあきらめ、ChromeのベースとなっているChromiumをベースにカスタマイズした新ブラウザをWindows 10の標準ブラウザとして組み込んでしまおうとしている、というのです。

なるほど確かに、Windows標準ブラウザの最大のライバルであるChromeの特徴を取り入れたブラウザを作ってしまえば、より標準ブラウザを使ってくれる人も増えるかもしれませんね。

現在よく使われるブラウザとして、Edge、InternetExplorer、Safari、Firefox、そしてGoogle Chromeと種類があります。
IEを除いてHTML5に準拠しているとはいえ、同じコードを動かしても微妙に異なった動作をすることがあり、Webプログラムを作る際はその差異を埋めるのが結構大変だったりします。

今後、もし記事のようにWindows 10の標準ブラウザがChrome系になれば、少なくともWinodws10の標準ブラウザとGoogleChromeの動作の差異を気にすることなく開発ができることになるので、開発者としてはとてもありがたい話になりそうな気がします。

今後の動きに注目したいですね。

  • この記事いいね! (0)
村上 著者:村上

【Cordova】端末内のファイルを開く「cordova-plugin-file-opener2」をiOSでも使う

先日投稿した、「cordova-plugin-file-opener2」を使って端末内のファイルを開く方法の、iOSバージョンです。
思ったよりも簡単に実装できました。

プラグインはこちらからご確認ください。

GitHub – pwlin/cordova-plugin-file-opener2: A File Opener Plugin for Cordova
https://github.com/pwlin/cordova-plugin-file-opener2

ちなみに先日の投稿についてはこちらから。

【Cordova】端末内のファイルを開くプラグイン「cordova-plugin-file-opener2」
https://cpoint-lab.co.jp/article/201812/【cordova】端末内のファイルを開くプラグイン「cordova-plugin-file-op/

 

さて、実装方法ですが、コード自体は下記のとおりです。

let filePath = [開きたいファイルのパス];
if (window.device.platform === 'Android') {
  filePath = filePath.replace(/^file:\/\//, '');
}
window.cordova.plugins.fileOpener2.open(
  filePath,
  'image/png',
  {
    error: function() {
      // エラー時の処理
    },
    success: function() {
      // 成功時の処理
    },
  }
);

異なる点は開きたいファイルを指定しているパス値のみで、それ以外は先日に投稿したコードとほぼ同じです。

Android と iOS では開くファイルのパス指定方法が異なるので、まずは端末が Android なのか iOS なのかを判断します。
上記のコードでは、3行目にあたります。
使用しているプラグインは「cordova-plugin-device」です。

GitHub – apache/cordova-plugin-device: Apache Cordova Plugin device
https://github.com/apache/cordova-plugin-device

device.platform で、Android や iOS などの、プラットフォームを示す文字列が取得できるので、それを使って判断しています。
で、Androdだったら、文頭についている file:// をとり、iOS だったらそのままです。

あとは、取得・整形したファイルパスとファイルのMIMEタイプを fileOpener2 のプラグインで指定して、ファイルを開く処理を実行します。
そうすれば、指定したファイルが展開されるはずです。

 

以上、iOSで端末に保存されたファイルを開く方法でした。
Androidは、サンプルコードから文頭の file:// が不要ということが分かったのですが、iOSの指定方法が見つけられず…。
で、試しに取得したファイルパスを加工せず、そのまま指定したところ、問題なく実行されたという次第です。
行き当たりばったりな気もしますが、動いたので問題なし!ということにします。

ということで、Android・iOSの両端末でのファイル展開機能の実装については、これで対応が完了です。

  • この記事いいね! (0)
村上 著者:村上

【備忘録】MacのFinderで隠しファイル・フォルダを表示する方法

タイトル通り、通常だと Mac の Finder で表示されない隠しファイル・隠しフォルダを表示させるように設定する方法についてです。

今日、Mac でとあるファイルにアクセスしようとしたとき、そのファイルが隠しファイルだったために、アクセスできない!という状況に陥りました。
で、隠しファイルを表示する方法を調べたので、今後のための備忘録としてメモ。

今回参考にしたサイトは下記からご確認ください。

Mac – Finderで隠しファイル・フォルダを表示する方法 – PC設定のカルマ
https://pc-karuma.net/mac-finder-show-all-files/

 

さて、隠しファイル及びフォルダを非表示から表示に変更する方法ですが、まずターミナルアプリを起動します。
で、下記のコマンドを実行します。

defaults write com.apple.finder AppleShowAllFiles TRUE

上記を実行すると、隠しファイルを含むすべてのファイル・フォルダが Finder で表示されるようになります。

あとは、この設定を反映するために、Finder プロセスを下記のコマンドで終了します。

killall Finder

作業としては以上で終了です!
Finderを確認したところ、無事に隠しファイルが表示されており、操作することができました。

なお、もしFinderでの隠しファイルの表示設定を非表示に戻したい場合は、下記を実行すればOKとのことでした。

defaults write com.apple.finder AppleShowAllFiles FALSE
killall Finder

 

以上、MacのFinderでの隠しファイル表示・非表示設定の変更方法でした。
Windows だと、エクスプローラーの表示タブからサクッと変えられるのですが…Macは少しだけ面倒ですね。

  • この記事いいね! (0)
村上 著者:村上

【Cordova】端末内のファイルを開くプラグイン「cordova-plugin-file-opener2」

前回、端末に画像や音声ファイルをAndroidなどの端末にダウンロードするプラグインを紹介したので、今回は端末内のファイルを開く方法について。
使用したプラグインは「cordova-plugin-file-opener2」です。

GitHubは下記からご確認ください。

GitHub – pwlin/cordova-plugin-file-opener2: A File Opener Plugin for Cordova
https://github.com/pwlin/cordova-plugin-file-opener2

 

プラグインの導入は、例のごとく下記のコマンドを実行します。

cordova plugin add cordova-plugin-file-opener2

使い方はとても簡単で、下記のように開きたい端末内のファイルのパスと、その MIMEタイプを指定するだけ。

cordova.plugins.fileOpener2.open(
    [開きたいファイルのパス], 
    [ファイルのMIMEタイプ], 
    {
        error : function(){
            // ファイル展開 失敗時に実行する処理
        }, 
        success : function(){
            // ファイル展開 成功時に実行する処理
        } 
    } 
);

ファイルのパスは、/storage/emulated/0/Pictures/[ファイル名].jpg のような感じで指定します。
こちらのパスの値については、私の環境では、ファイルダウンロードに成功した時に取得できる file:///storage/emulated/0/Pictures/[ファイル名].jpg から、file:// を取ったものを使っています。

ご覧の方の環境に合うかは分かりませんが、参考にコードを記載しておきます。

window.document.addEventListener('DOWNLOADER_downloadSuccess', function(event) {
  const data = event.data;
  const filePath = data[0].nativeURL.replace(/^file:\/\//, '');

  if (fileMIMEType !== null) {
    window.cordova.plugins.fileOpener2.open(
      filePath,
      'image/png',
      {
        error: function() {
          // ファイル展開失敗時の処理
        },
        success: function() {
          // ファイル展開成功時の処理
        },
      }
    );
  }
});

こちらはとりあえずAndroidで動作するようにしてあるだけなので、iOS には対応していません。これからやります。
なお、MIMEタイプについても、とりあえず png 形式のみ対応なので、もし扱うファイル種類が定義されていない場合は、拡張子で jpg、gif くらいは判断できるようにしたほうが良さそう。

ちなみに、動作確認中に、うっかり音楽ファイル(mp3)を imgae/png で開いてしまいましたが、エラーにはならず、ファイルが壊れているような表示になりました。
その後、きちんと audio/mp3 にしたら、開くアプリの選択肢が表示され、再生もできるようでしたので、音声ファイルも問題なさそうです。

 

以上、Android端末内のファイルをアプリで開く方法でした。
とりあえず、Androidに問題がなかったので、iOS でも使えるように修正していきたいと思います。

  • この記事いいね! (0)
村上 著者:村上

【Cordova】端末にファイルをダウンロードするプラグイン「cordova-plugin-file-downloader」【解決済】

昨日投稿した、「cordova-plugin-file-downloader」について、問題なく動作させることができたので…というか、ダウンロードできていたことが分かったので、それのご報告です。

昨日の記事はこちらから。

【Cordova】端末にファイルを保存するプラグイン「cordova-plugin-file-downloader」【未動作】
https://cpoint-lab.co.jp/article/201811/【cordova】端末にファイルを保存するプラグイン「cordova-plugi/

 

ダウンロードしたファイルの確認方法ですが、私の端末(Android 7.0)では「ダウンロード」アプリから確認ができました。
まず、アプリ一覧から「ダウンロード」アプリを開き、サイドメニューから、端末のローカルストレージを選択します。
画面イメージは下記のとおりです。

ローカルストレージを選択すると、フォルダ一覧が表示されるので、ここからプラグインの初期設定時に folder で指定したフォルダ名を探します。
無事見つかれば、このフォルダ内にダウンロードしたファイルが保存されているはずです。

ちなみに、そのコードはこちら。

downloader.init({folder: "[端末の保存先ファイル名]"});

ということで、ただ単に私がダウンロードが完了したファイルを探せなかっただけでした!
大変失礼致しました…!

 

さてしょうもない結末だったので、ダウンロード後の処理を記述する方法についてご紹介したいと思います。
オプションに onSuccess とかの指定ができなかったので、てっきり出来ないかとも思いましたが、ちゃんとありました!
コードは下記のとおりです。

document.addEventListener('DOWNLOADER_downloadSuccess', function(event) {
  const data = event.data;
  console.log(data[0].name);
  console.log(data[0].fullPath);
  console.log(data[0].nativeURL);
});

document.addEventListener の第一引数で、DOWNLOADER_downloadSuccess を指定すると、ファイルのダウンロードに成功した時にこの関数が呼び出されます。
で、変数 event に、データが入っているので、上記のように指定すると、ファイル名や保存先のパスなどが取得できます。

第一引数は、他にも DOWNLOADER_downloadErrorDOWNLOADER_downloadProgress なんかもあるので、ご要望に合わせて使い分けてください。

 

以上、cordova-plugin-file-downloader を使ったダウンロード方法とダウンロードしたファイルの確認方法でした。

  • この記事いいね! (0)
takahashi 著者:takahashi

ペアリング済みの端末がPCから離れたときに自動でWindowsをロックする標準機能「動的ロック」

Windows10にはアップデートで知らないうちにとても便利な機能が追加されていることがよくあります。

今回ご紹介する標準機能「動的ロック」もその一つです。

設定は下記手順で行います。(※あらかじめスマートフォンやタブレットをPCとBluetoothでペアリングしておく必要があります。)
まず、スタートメニュー(Windowsアイコン)から歯車アイコンをクリックします。

開いた設定画面から
アカウント->サインインオプション
と辿っていくと、画面の中に”動的ロック”
という項目が見えるかと思います。

項目内の
“その場にいないときにWindowsでデバイスを自動的にロックすることを許可する”
にチェックを入れます。

“ペアリングしたデバイスを探しています”
と出てくるので消えるまで待ちます。

文字が消えれば設定完了です。

この状態で、PCとペアリングしたスマホやタブレットをもってPCから離れると、一定以上の距離に離れてから約1分で自動的にロックされます。
なお、スマートフォンを再び近づけてもロックは解除されませんので注意してください。。

第三者に触られると困るPCを使用していて、いつもついついロックを忘れてしまう方、ロック操作を毎回するのはめんどくさい…という方は是非一度試してみてください。

  • この記事いいね! (0)