日記

日本語の勉強のためのブログ

【Kali Linux】ターミナルに貼り付けると変な記号がつく

1. 問題

Kali Linuxのターミナルを使う際,ショートカットキーCtrl+Shift+Vで貼り付けを行うと,たまに[[200~のような記号が付与されて貼り付けられることがある.

例えばabcという文字列をコピーし,Ctrl+Shift+Vで貼り付けると,たまに^[[200~abc~という文字列が貼り付けられてしまう.

2. 解決

貼り付け前にCtrl+Vを間違って押したことが問題だった.

Windowsなどでは貼り付けのショートカットキーはCtrl+Vであるが,LinuxやターミナルではCtrl+Shift+Vである.

そのため,Windowsのノリで,ターミナルで誤ってCtrl+Vを押してしまうと,貼り付けた文字列に[[200などの記号がついてしまう状態になってしまう.

このモードを解除するには,再度Ctrl+Vを押せばよい.


(ここから曖昧)

ターミナルでCtrl+Vを押してしまうと,次のキー入力が書かれた通りに解釈されるらしい.
(例)↑キーを押してもスクロールせず,↑キーに対応する文字が入力される.

もともとコピーした文字列には[[200~などの記号がくっついており,貼り付け時にはこれらが無視されて貼り付けられるらしい.
しかし,Ctrl+Vを押してしまうと,書かれた通りの文字列が貼り付けられるため,[[200~が付加された状態で貼り付けられてしまう.

参考文献

arch linux - Pasting 'required text' into terminal emulator results in '^[[200~required text~' - Super User

YouTube動画の投稿日時が隠れるので別の場所に表示するブックマークレット+Chrome拡張

2022/08/26追記
この記事に記したブックマークレットについて、大きな問題点を直した修正版を以下記事に載せたので、もし使用する場合はそちらを使ってください。 everykalax.hateblo.jp

1. はじめに

PCでYouTubeの動画を閲覧しているときに,たまに投稿日時がほかのボタンに隠されてしまう状況が発生する.
これは,スーパーサンクスや動画のダウンロード,クリップを許可しているチャンネルの動画にはそれらのボタンが追加されるために生じる.

文字だけでは説明しづらいため,スクリーンショットを撮った.
図1は標準的な動画画面であり,投稿日時が問題なく表示されている.
図2はスーパーサンクスなどが許可されている動画の画面であり,投稿日時が隠れて見えなくなってしまっている.
※隠れていることの証拠に,図3のようにページの表示倍率を変更すると見えるようになるが,文字が小さく少し見づらい.

図1. 標準的な動画画面
図2. 投稿日時が隠れてしまった動画画面.再生数も巻き添えを食らっている.
図3. 表示倍率を95%→85%に縮小したら見えるようになったが,文字が小さくなって見づらい.

これを解決するためにブックマークレットを作成した.
なお,暇なときにChrome拡張機能にしようと思っているので,そちらも作成したら追記する.作成したので4節に追記した.

2. 環境

  • Windows10 home
  • Vivaldi 5.3.2679.58 (Stable channel) (64-bit)

おそらくChromeでも動作すると思う.

3. ブックマークレットの作成

完成したものがこちら.

javascript:(function(){document.getElementById("owner-sub-count").innerText+=" / "+document.querySelector("div#info-strings>yt-formatted-string").innerText;
}());

これを実行すれば,チャンネル登録者が表示されている部分に投稿日時が追記される.
表示個所はどこでもよかったので,今回はその位置に表示することにした.

ブックマークレットの使用法については次の記事などを参照.

ブックマークレットの登録方法 - Qiita

実行後の動画画面を図4に示す.投稿日時がチャンネル登録者数の横に表示されたことが確認できる.

図4. ブックマークレット実行後の動画画面

3.1 作成手順(読み飛ばしてもらって結構です)

特に難しい部分はない.日時をクエリセレクタで取得し,別の適当な場所に追記するだけである.
スペースが余っている部分を探した結果,ここではチャンネル登録者数が表示されている部分に追記することにした.

日時はdocument.querySelector("div#info-strings>yt-formatted-string").innerTextで,チャンネル登録者数が表示されている要素はdocument.getElementById("owner-sub-count")で取得できるから,あとは後者に前者を追記するだけである.

4. Chrome拡張機能の作成

荒削りではあるがひとまず完成したため,GitHubに上げた.

github.com

(2022/06/24 追記)
関連動画などから別の動画画面に遷移すると以前の表示が残ったままになる現象を確認した.再読み込みすれば正常に機能するので,必要な際はリロードしてほしい.また時間あったら直すつもり.

(2022/06/26 追記)
閲覧数も表示するようにした.またフォーマットもちょっと修正.

4.1 作成手順

まず,ロードし終えたら実行するように以下のコードを書いたが,失敗した.

window.addEventListener("load", () => {
    document.getElementById("owner-sub-count").innerText += " / " + document.querySelector("div#info-strings>yt-formatted-string").innerText;
});

なぜ失敗したのかというと."load"イベントが発火した後に投稿日時などのDOMが生成される仕様となっていたためである.
そのため,"load"イベントに頼らずに,それらのDOMが生成されるまで待つ必要がある.

いろいろ調べた結果,愚直にsetInterval()setTimeout()を使用してループを組み,待機している例が多かった[1][2][3].そのアイデアを用いて自分なりにコードを組んでみたところ,うまく動作した.

以下に作成したコード(script.js)の概略(疑似コード)を示す.

if (URLが"https://www.youtube.com/watch~"という形式ならば) {
    setInterval(() => {
        if (チャンネル登録者数のDOMが存在する(すでに生成された)ならば){
            clearInterval();
            チャンネル登録者数のDOMに投稿日時を追記する;
        }
    }, 300ミリ秒);
}

なお,1行目で動作対象のURLかどうかを調べているが,これは,manifest.jsonでは動作対象のURLをhttps://www.youtube.com/watch?v=<動画ID>のように指定することができないためである.
具体的には,https://www.youtube.com/*のような指定しかできないため,これでは登録チャンネル一覧のページhttps://www.youtube.com/feed/subscriptionsなども誤検知してしまう(おそらく).
そのため,手間ではあるがscript.jsでも確認するようにしている.

参考資料

[1] jsで対象のDOMが出現するまで待つ(javascript) | Once and Only
[2] 【Javascript】setInterval()で要素が現れるまで待つ - Qiita
[3] javascript — 要素が存在するまで待つ方法は?

その他,以下のページは非常に役立った.
2. 実践編 - Chrome 拡張機能を作ろう

また,この記事の図に使用した動画は以下の通り.

HackTheBoxの登録時にreCAPTCHAに失敗し続ける

vivaldiでタイトルのエラーが出て登録できなかったが,chromeで試したら登録できた.
原因は謎だが,取り急ぎ現在の環境だけ残しておく.

1. 環境

2. エラー内容

HackTheBoxに登録しようと,https://app.hackthebox.com/inviteに各情報を入力し,REGISTERを押したところ,reCAPTCHA failedのようなエラーが出て登録に失敗する.
閲覧データやキャッシュを削除しても駄目だった.

Chromeで試したところ登録できたので,Vivaldi固有の問題なのかもしれない?

3. 類似事例

twitterで調べたところ,今年5月に同様のエラーに遭遇した方がいたようだ.

termuxにssh接続したい

ネットワークについて実践的に復習しようと思い立ったためやってみた.

1. 環境

  • 接続元
    • Windows 10 Home
    • WSL2(Ubuntu20.04.4 LTS)
  • 接続先

2. 概略

ssh接続するには,まず接続先でsshdというコマンドを使いssh接続を受け付ける.
その後,接続元でsshコマンドを用いて接続先にssh接続する.

参考: 【入門 SSH プロトコル】コマンドでの接続方法やconfigの設定 | ほげほげテクノロジー

3. 実際にやってみた

3.1 termuxのローカルIPアドレスを知る

接続元のwindowsと接続先のandroidが同一LAN内にいたので,windowsnetdiscoverを実行すればいいと思ったがWSLではエラーが出て使えなかった(ソケットが何とか言われた).

そのためtermux自身を用いて調べる.
ipコマンドは入っていなかったのでifconfigで調べると,192.168.0.3がtermuxのローカルIPアドレスであるとわかった.

3.2 termuxでsshdを実行

apt install opensshsshdがインストールされる.インストール完了と同時に公開鍵・秘密鍵も自動作成された.

そしたらsshdを実行.

3.3 termuxのパスワード設定

必要らしい.

パスワードはpasswdを実行すれば設定できる.

参考: AndroidにTermuxを入れてSSHで入ってLinux環境を作る【まとめ版】 | 楽しい活字中毒

termux側の設定はここまで.

3.4 windows(接続元)からsshでtermuxにssh接続

ssh -p 8022 <termuxのipアドレス>で接続できる.パスワードを聞かれるので3.3節で設定したパスワードを入力する.

なお,最初ssh <termuxのip>と実行したが接続できなかった.
実はtermuxは1024以下のポートが使えないらしく,sshのポートが(デフォルトでは)8022に設定されているらしい.

参考: Termux on AndroidのSSHサーバに接続する方法 | LFI

4. おまけ - termuxにhttpサーバを立てる

termuxにhttpサーバを立て,PCから閲覧してみる.

4.1 適当なhtml文書の準備

termuxのホームディレクトリ直下に適当なディレクトリを作成し,cdでそこに移動する.
そしてそのディレクトリ内に適当なhtml文書を入れておく.

今回はテストなので3秒で以下の文書(index.html)を作成した.

<html>
        <head>
                <title>Test</title>
        </head>
        <body>
                It Works!
        </body>
</html>

4.2 httpサーバを立てる

python3 -m http.server 8000でhttpサーバを立てる.
ここで,このコマンドを実行する場所は,先ほど作成したhtml文書があるディレクトリでないといけないことに注意する.

4.3 ブラウザで閲覧

ブラウザのアドレスバーにhttp://<termuxのIPアドレス>:8000/と入れることでhttpサーバにアクセスし,作成した文書を閲覧できる.

図1. Chromeで該当ページにアクセスした際のスクショ

なお,先ほど作成したhtml文書名がindex.html以外の場合は,http://<termuxのIPアドレス>:8000/<html文書名>にアクセスすれば閲覧可能.

5. その他注意

ssh接続した後いろいろ遊んでいると,勝手にssh接続が切れ,再接続もできないことがあったが,スマホを見るとスリープ状態になっていたので,これが原因であった.スリープにならないように設定するなどの対策が必要である.

Kali linuxで日本語入力したい(表示言語は英語のままにする)

Kali Linuxで日本語入力を行えるように設定する.
localeや表示言語を日本語にして,かつ日本語入力の設定を行っているサイトはあったが,表示言語がデフォルト(英語)のままで,入力言語のみ日本語としているサイトは見かけなかったので,書いておく.

1. 環境

仮想環境上のkali linuxを使っている.

2. 方法

(apt updateapt upgradeはすでに行ったものとする)

  1. sudo apt install ibus-anthyanthyをインストール(必要ならその後再起動)
  2. IBus Preferencesを開く
    図1. IBus Preferences
  3. Input MethodAddをクリック
  4. Select an input methodウィンドウが開くので,JapaneseAnthyを選択してAdd
    図2. Anthyを選択
  5. 右上のバーのENとかJAとか書かれてる場所(言語バー)を左クリックしてJapanese-Anthyを選択

このままではキーボードレイアウトがUSで使いにくい.そのため,日本語キーボードのレイアウトに変更する.

1, Keyboard設定(左上のKaliマークを押して検索窓にKeyboardと打つと見つかる)を開く
2. LayoutKeyboard layoutAddJapaneseを追加し,English(US)を削除

参考文献