OSDN Git Service

[update] : Added mode command
authorhayao <hayao@fascode.net>
Sat, 27 Feb 2021 11:25:40 +0000 (20:25 +0900)
committerhayao <hayao@fascode.net>
Sat, 27 Feb 2021 11:25:40 +0000 (20:25 +0900)
dmc

diff --git a/dmc b/dmc
index 3b1ee67..0f3bd0c 100755 (executable)
--- a/dmc
+++ b/dmc
 # https://qiita.com/laikuaut/items/4bc07eabce56ee30812d
 # https://qiita.com/t_nakayama0714/items/80b4c94de43643f4be51
 
+SCRIPT_PATH="$( cd -P "$( dirname "$(readlink -f "${0}")" )" && pwd )"
+
 script_usage(){
     echo "usage: dmc [options] [command]"
     echo
     echo "A simple tool for switching LightDM Greeters"
     echo
+    echo " General command:"
+    echo "    dm [display manager]              Set display manager"
+    echo "    [mode] [command]                  You can specify the mode as a command"
+    echo
     echo " LightDM command:"
     echo "    autologin [username] [session]    Set up automatic login (with blank username to disable)"
     echo "    greeter                           Run greeter setup wizard"
@@ -435,6 +441,69 @@ check_filetype(){
     return 1
 }
 
+# systemdのunitが存在しているか確認
+check_systemd_unit(){
+    if [[ ! -v 1 ]]; then
+        return 1
+    elif systemctl cat "${1}" 1> /dev/null 2>&1; then
+        return 0
+    fi
+    return 1
+}
+
+#== すべてのモード用コマンド ==#
+command_general_dm(){
+    if [[ -z "${1}" ]] || [[ "${1}" = "" ]]; then
+        msg_error "Please specify display manager"
+        exit 1
+    fi
+
+    # 現在のディスプレイマネージャを無効化
+    systemctl disable "${CURRENT_DM}.service"
+
+    # 指定されたディスプレイマネージャを有効化
+    if check_systemd_unit "${1}"; then
+        systemctl enable "${1}.service"
+    else
+        msg_error "Wrong display manager name"
+    fi
+}
+
+# モードをコマンドとして扱い自身を再実行する
+# command_mode <mode> <command> <args>
+command_mode(){
+    if [[ -z "${2+SET}" ]] || [[ "${2}" = "" ]]; then
+        msg_error "Please specify command"
+        exit 1
+    fi
+
+    local _mode="${1}" _command="${2}"
+    local _dmc_args="-e ${USE_EDITOR} -m ${_mode}"
+    shift 2
+
+    # 基本的な変数を設定
+    local _command_args="${*}"
+    : "${_command_args-""}" # サブコマンドの引数が何も指定されなかった場合に空文字を代入
+
+
+    # オプション設定
+    if [[ "${NON_INTERACTIVE}" = true ]]; then
+        _dmc_args+=" --non-interactive"
+    fi
+    if [[ "${NOROOT}" = true ]]; then
+        _dmc_args+=" --noroot"
+    fi
+    if [[ "${NO_CHECK_TARGET}" = true ]]; then
+        _dmc_args+=" --no-check-target"
+    fi
+    if [[ "${WRITE_ALL_FILES}" = true ]]; then
+        _dmc_args+=" --write-all-files"
+    fi
+
+    bash -c "${SCRIPT_PATH}/$(basename "${0}") ${_dmc_args} ${_command} ${_command_args}"
+}
+
+
 
 #== LightDM用の汎用関数 ==#
 # キーが設定されている設定ファイル
@@ -1725,6 +1794,12 @@ case "${COMMAND}" in
         lxdm_init_configs
         comamnd_lxdm_edit_script
         ;;
+    "dm")
+        command_general_dm "${COMMAND_ARGS}"
+        ;;
+    "lightdm" | "gdm" | "sddm" | "lxdm" | "webkit2" | "qtquick" | "slick")
+        command_mode "${COMMAND}" "${COMMAND_ARGS}"
+        ;;
     *)
         msg_error "This command cannot be used in any mode"
         exit 1