web-dev-qa-db-ja.com

キーボードの「カスタムショートカット」が受け入れるコードの種類

DebianまたはUbuntuを使用するときに最初に行うことを教えられたことは、ショートカットを作成することです(私の場合は Ctr+Alt+T)ターミナルを開きます。これを行うには、コードx-terminal-emulatorで新しいキーボードショートカットを作成します(Xシステムのオプション>キーボード)。これは、bashコマンドとして十分に単純なようです。これを端末に入力すると、端末ウィンドウも生成されます。

現在、Debian 9.5(Stretch)を使用しており、新しい外部キーボードのショートカットをいくつか定義しようとしています。ただし、ターミナルから使用できる他のコマンド(firefoxecho "$"など)のショートカットを作成しようとすると、ショートカットは機能しません。 createショートカットがどのようなコマンドを実行するかについての適切なドキュメントを見つけることはできないようですが、bashコマンドを受け入れるようには見えません。

2
Dmitry Vaintrob

DebianまたはUbuntuを使用するときに最初に教えられたことは、ショートカットを作成することです(私の場合は Ctr+Alt+T)ターミナルを開きます。これを行うには、コードx-terminal-emulatorで新しいキーボードショートカットを作成します(Xシステムのオプション>キーボード)。

ショートカットには2つのタイプがあります。それらのいくつかはデスクトップ環境によって管理されています-のようなもの Ctr+Alt+T。異なるデスクトップ環境は、異なるショートカットのセットを管理します。 GNOME、Unity、LXDE、MATEなどのデスクトップ-それらにはコードが組み込まれているため、デスクトップ環境のコードを再コンパイルしない限り、これらのショートカットを実際に変更することはできません。 Openbox、Blackboxなどのデスクトップ-これらのショートカットは管理されません。教えられたことは、デスクトップ環境のコンテキスト内で検討する必要があります。 GNOMEや私が以前言及した他のデスクトップのx-terminal-emulatorのショートカットを宣言する必要はありません。

ただし、ターミナルから使用できる他のコマンド(firefoxやecho "$"など)のショートカットを作成しようとすると、ショートカットは機能しません。

カスタムショートカット-自分で宣言するもの-executablesを操作します。つまり、/bin/bashなどの有効なファイルをディスクに指定する必要があります。少なくとも、$PATH変数の下にリストされているディレクトリの1つに存在するコマンド。デスクトップ環境は、ショートカットを押すと、execve() syscallを実行してそのアプリを起動します。これは、echo $?が機能しない理由でもあります。$?の意味を理解するシェルはありません。シェル変数は、シェル内でのみ意味を持ちます。それで、あなたは何をしますか?シェルを起動するショートカットを教えてください!通常、これは、短いコマンドの場合はbash -c 'echo $?'を介して実行されるか、スクリプトの上部に適切な#!行を含むスクリプトを使用します。そのため、ショートカットはシェルコマンドを実行するのではなく、実行可能ファイルを実行することに注意してください。 bash -c '...'が使用される実際の例を与えるには、 xdotoolコマンドを実行してキーの押下をシミュレートするショートカットを作成する方法 を参照してください。

firefoxが機能しなかった理由については、firefoxが既存の開いているウィンドウをチェックしているか、別のエラーがある可能性があります。 bash -c 'firefox > 2>&1 foxlogfile.txt'を実行して、問題の原因または表示される可能性のあるエラーを調べることを検討してください。

Createショートカットがどのようなコマンドを実行するかについての適切なドキュメントを見つけることはできないようですが、bashコマンドを受け入れるようには見えません。

簡単な答え-本当にそのようなドキュメントはありません。ショートカットがシェルコマンドの代わりに実行可能ファイルを使用することを覚えている限り、本当に必要なのはそれだけです。そしてもちろん、デスクトップでショートカットを宣言する方法は何かを知る必要があります-Openboxの方法は、たとえばGNOMEとは異なります。

追伸:実際には、3番目のタイプのショートカットがありますが、デスクトップ環境とは関係ありません。つまり、GUIショートカットではありません。 bash~/.inputrcファイルを読み取ります。このファイルでは、特定のキーの組み合わせに対して実行される特定のコマンドを宣言できます。ただし、これはこの質問の範囲外であり、別のトピックです。例については、 this を参照してください。

P.S.2:UnityなどのGNOMEベースのデスクトップは、GSettingsとDConfデータベースを使用して、デスクトップの各ユーザーに特定の設定を適用します。そのため、これらの環境下のショートカットはコマンドラインで制御および設定できますが、同じ概念が適用されます-実行可能ファイルか、デスクトップ環境のコードにあるためデスクトップ環境が認識するものでなければなりません。 この記事 Unityでスーパーキーを無効にするスクリプトについての1つと Jacob Vlijmの答え を介してショートカットを設定する方法を参照してください(これはGNOMEベースのものにのみ適用されます)。

こちらもご覧ください

2