KDE設定で任意のコマンドを実行するショートカットを指定できます。
KDE でショートカットにコマンドを割り当てるには、次のようにします。System Settings
-> Shortcuts
-> をCustom Shortcuts
右クリックしてNew
-> Global Shortcut
-> を選択しますCommand/URL
。Action
タブに移動してコマンドを入力します。そして、Trigger
タブで実際のショートカットを割り当てます。このメカニズムはsudo以外のコマンドに対して正しく機能します。
しかし、残念ながら、root権限を必要とするコマンド(家庭)を使用するとsudo systemctl start something
実行されません。
この制限を回避する方法はありますか?評価する権限が必要なアクションをトリガーできるようにしたいです。
答え1
1つの解決策は、ルートが所有し、SUIDビットを持つ実行可能ファイルを使用することです。
おそらく、独自のバイナリがないので、コマンドを使用したいと思います。 suid ビットを使用して bash スクリプトファイルを作成する場合、suid ビットは無視されます。setuidが機能しないのはなぜですか?。
したがって、コマンドを実行するにはバイナリをコンパイルする必要があります。
ファイルの作成start_smth.c
:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
setuid(0);
system("systemctl start something");
return 0;
}
権限をコンパイルして設定します。
$ gcc start_smth.c -o start_smth
$ sudo chown root:root start_smth
$ sudo chmod 4755 start_smth
設定のコマンド/ URLフィールドにstart_smthバイナリパスを入力します(例:)/home/user/bin/start_smth
。
このように準備する必要がある多くのコマンドがある場合は、次のスクリプトを使用できますcompile_and_set_permissions.sh
。
#!/bin/bash
FILE="$1"
FILE_NO_EXT="${FILE%.*}"
gcc "$FILE" -o "$FILE_NO_EXT"
sudo chown root:root "$FILE_NO_EXT"
sudo chmod 4755 "$FILE_NO_EXT"
次に、acファイルをパラメータとして渡します。
$ compile_and_set_permissions.sh stop_smth.c
答え2
使用端末エミュレータの名前(例:Konsole)を-eフラグとして指定し、コマンドを追加します。
konsole -e sudo systemctl start something