Cinnamon: Super+Number/Win+1, 2, 3 등을 사용하여 창 간 전환

Cinnamon: Super+Number/Win+1, 2, 3 등을 사용하여 창 간 전환

포럼에 질문함, 하지만 행운은 없습니다. Windows나 Ubuntu의 Unity처럼 Win 키와 1~9의 숫자를 사용하여 창 간에 어떻게 전환합니까?

이러한 키보드 단축키는 수년에 걸쳐 많은 시간을 절약해 주었으며 Cinnamon과 같은 널리 사용되는 데스크탑 환경에서는 기본적으로 이를 구현하지 않는다는 사실에 놀랐습니다. 내 파일 관리자는 항상 첫 번째 창으로 열리고 터미널 창은 #2, IDE는 #3, 브라우저는 #4로 열립니다.

Win+1/2/3/etc를 수동으로 할당합니다. 항상 응용 프로그램의 새 인스턴스가 시작되므로 불가능합니다. 일부 응용 프로그램에는 "단 하나의 인스턴스" 옵션이 있을 수 있지만 이는 예외이며, 그런 경우에도 새 인스턴스가 시작되고 종료되는 깜박임이 표시됩니다.

답변1

당신이 요구하는 것은 실제로 간단한 해킹으로 달성될 수 있습니다. 내 경우에는 Super+2"가능하면 emacs로 전환하고, 그렇지 않으면 엽니다"에 바인딩하고 싶습니다 . 이것을 Cinnamon에서 구현하려면 먼저 sudo apt install wmctrl(또는 Linux 배포판에 패키지를 설치하는 다른 방법으로) emacs(또는 바인딩하려는 응용 프로그램)를 열고 wmctrl -x -l현재 열려 있는 창 목록을 가져옵니다.

0x0440013f  0 emacs.Emacs           username-debian-x1 emacs@username-debian-x1

이제 emacs.Emacs다음 bash 스크립트를 작성하십시오.

#!/usr/bin/env bash
wmctrl -x -a emacs.Emacs || emacs

그런 곳에 두고 해당 파일에 대해 실행을 활성화한 다음 Cinnamon 키보드 설정에서 사용자 정의 명령을 만들고 해당 쉘 스크립트를 선택한 다음 바인딩(또는 원하는 대로)할 수 ~/Documents/switch-emacs.sh있습니다 . 이것은 즉시 작동할 것입니다(Debian 10 Buster stable의 Cinnamon에서 테스트됨).chmod +xSuper+2

출처: Github에 대한 댓글

wmctrl명령을 사용자 정의 명령에 직접 입력하는 대신 이를 쉘 스크립트에 넣어야 하는 이유는 이 ||연산자가 키보드 단축키에 직접 전달될 때 제대로 작동하지 않는 것 같기 때문입니다.

업데이트: Cinnamon 버전 4.2.4-1(아마도 이전 버전)부터 이 Super+number "켜기 또는 전환" 기능은 Cinnamon에 내장되어 있으며 위의 해킹 없이 즉시 작동하는 것으로 보입니다. 그러나 2019년 9월 현재 Arch와 같은 롤링 배포판에만 이러한 새로운 계피 버전이 있습니다. Mint, Ubuntu 및 Debian의 경우 이러한 버전이 나올 때까지 위의 해킹을 계속 사용해야 합니다(2019년 9월 기준). 계피 버전 번호가 충분합니다. 롤 포워드.

답변2

최신 버전에서는 (아마도최소한 Linux Mint 20 [1])부터 그룹화된 창 목록 패널 애플릿의 일부로 Cinnamon에 직접 내장되어 있으며 기본적으로 활성화되어 있습니다.

기본적으로 활성화되어 있으므로 시스템 설정 > 애플릿 > 그룹화된 창 목록[구성, 즉 작은 기어 아이콘] > 일반 > Super+<번호> 활성화 바로가기에서 앱을 전환/열 수 있도록 비활성화(및 다시 활성화)할 수 있습니다.

[1] 그룹화된 창 목록이 나타날 때 해당 기능이 이미 있는 것 같습니다.계피에 추가(82d8170),그 다음에잠시 삭제됨(94719c2), 그 다음에다시 추가됨(48ac13f)불평 끝에 마침내구성 가능(linuxmint/cinnamon#9175).

답변3

나는 antiX-linux를 사용하고 다음 activate_windows.sh스크립트를 만들었습니다.

#!/bin/bash

# Script to activate windows with a specific classname
# Usage: ./activate_windows.sh classname

# to identify the classname and class of a window, run `xprop | fgrep CLASS`, and click on the desired window

windows=$(xdotool search --classname "$1") # Get the IDs of all windows with the specified classname
current=$(xdotool getactivewindow) # Get ID of current active window

# if current window is from classname, minimize
if [[ "$windows" =~ "$current" ]]; then
    xdotool windowminimize "$current"
    windows="${windows//$current/}" # removes the window from the list, so as not to open it again
    found=true # at least one window found
fi

for id in $windows; do # while there is a window to open
    # activates the window, dumps stderr to stdout (2>&1), and saves the output (stderr and stdout) to the variable $error
    error="$(xdotool windowactivate $id 2>&1)"
    if [ -z "$error" ]; then # when it issues an error message, it fails to open
        exit 0 # if opened, stop trying
    fi
done

if ! [ "$found" = true ]; then
    $1 & # if there is no window, start a new
fi

이 스크립트를 넣고 ~/.local/bin/실행 권한을 부여했습니다( chmod +x ~/.local/bin/activate_windows.sh).

xdotool이 없으면 설치해야 합니다( sudo apt install xdotool).

그래서 제가 가장 많이 사용하는 각 앱에 대한 바로가기를 만들었습니다.

  • 슈퍼 +1 → ~/.local/bin/activate_windows.sh pcmanfm
  • 슈퍼+2 → ~/.local/bin/activate_windows.sh Firefox
  • 슈퍼 +3 → ~/.local/bin/activate_windows.sh lxterminal

당신은 자신의 것을 만들 수 있습니다. 창의 클래스 이름과 클래스를 확인하려면 xprop | fgrep CLASS원하는 창을 실행한 후 클릭하세요.

예를 들어, Firefox를 열 때마다 작업 표시줄의 Firefox 위치에 관계없이 super+2를 입력합니다.

관련 정보