web-dev-qa-db-ja.com

Ubuntu16.04スタートアップアプリケーションでの奇妙な動作

私はいくつかのスタートアップアプリケーションを持っています:

user@Host:~$ ls -l .config/autostart/
. . .
. . . XXX.desktop
. . . YYY.desktop
. . . ZZZ.desktop
. . . setxkbmap.desktop

これらの中には、CapsLockを無効にするコマンドがあります。

setxkbmap -option caps:none

まず、これらの起動コマンドのいずれかをsleepで編集しようとすると、機能しないようです。

sleep 20; setxkbmap -option caps:none

または...

sleep 20 && setxkbmap -option caps:none

次に、すべての起動コマンドからsleepコマンドを削除し、Caps Lockの無効化コマンドをリストの一番上に置くと、機能しませんが、他のコマンドは機能します...

スタートアップアプリケーションの外部のターミナルで実行された場合、すべてのコマンドは正常に機能するため、起動時に機能しない理由がわかりません。

[〜#〜]更新[〜#〜]

@ Xen2050の回答に基づいて、私は彼が提案した方法を実行可能なソリューションに適合させました。 2つの起動コマンドには、次のフォームを使用しています。

bash -c "sleep 20; specific_command"

そして他のものは、私はデフォルトの起動コマンドとして残しました。マシンの起動が速く、Caps Lockの無効化コマンドが一貫して機能しているため、これは問題ありません。

UPDATE 2

追加の調査を行ったところ、CapsLockを無効にするにはxkbがおそらく最良の方法であることがわかりました。この質問はスタートアップアプリケーションに関するものだったので、受け入れられた答えは有効です。しかし、Ubuntu16.04でCapsLockキーを無効にする方法を探している人が他にいる場合は、次のヒントを参考にしてください。

/usr/share/X11/xkb/symbols/pcを編集しましたが、ユーザーオーバーライドを使用するのがおそらく正しい方法だと思います(@quixoticが提案したように):

異なるキーに再マップされたときにターミナルにPageUpとPageDownを認識させる

1
nicorellius

.desktopファイルは完全/通常のシェルでExec=コマンドを実行しないと思います。したがって、複数のコマンドを使用する場合は、それらのコマンドでシェルを明示的に実行する必要があります。たとえば、次のように機能するはずです。

Exec=sh -c "sleep 5; notify-send test-delay"

またはあなたの場合:

Exec=sh -c "sleep 20; setxkbmap -option caps:none"
1
Xen2050