i3: 지정된 작업 공간에서 시작하는 데 시간이 오래 걸리는 프로그램을 시작하는 방법

i3: 지정된 작업 공간에서 시작하는 데 시간이 오래 걸리는 프로그램을 시작하는 방법

프로그램을 시작하도록 i3 시작 파일에서 데스크탑을 구체적으로 구성할 수 있지만 해당 데스크탑에 정상적으로 프로그램을 할당하지 않고 한 번만 실행할 수 있습니까?

다른 작업 공간으로 변경하는 것과 관련된 해결책이 있다는 것을 알고 있지만 이로 인해 한 가지 큰 문제가 발생합니다. 시작 시간이 "즉각적이지 않은" 프로그램이 있으면 프로그램이 대신 의 마지막 작업 공간으로 전환할 때 나타납니다. 내가 원하는 작업 공간에 나타납니다.

특히, 현재 시작 파일에서 Atom(나를 괴롭히는 atm 프로그램)을 작업 공간 9에 할당하는 것과 관련된 해결 방법을 만들었습니다. 현재로서는 괜찮지만 장기적으로는 권장되지 않습니다.

assign [class="Atom"] $workspace9
exec atom

exec --no-startup-id i3-msg 'workspace $workspace9; exec 
/usr/bin/urxvt'
#exec --no-startup-id i3-msg 'workspace $workspace9; exec /usr/bin/atom'
exec --no-startup-id i3-msg 'workspace $workspace1; exec /usr/bin/urxvt'

나는 원하는 방식으로 실행하고 할당 방법을 완전히 포기하기 위해 원자에 대한 주석이 달린 호출을 얻고 싶습니다.

나는 실제로 이것이 관련성이 있다고 생각하지 않지만 만일을 대비하여 나는 Arch 기반의 Manjaro-Linux를 실행합니다.

편집: 다음 코드 조각은 작동하지만 최종적으로 Atom을 열고 해당 데스크탑에서 세션을 시작하는 것을 제한하기 때문에 이 질문은 여전히 ​​열려 있습니다.

#assign [class="Atom"] $workspace9
#exec atom

exec --no-startup-id i3-msg 'workspace $workspace9; exec 
/usr/bin/urxvt'
exec --no-startup-id i3-msg 'workspace $workspace1; exec /usr/bin/urxvt'
exec --no-startup-id i3-msg 'workspace $workspace9; exec /usr/bin/atom'

이는 또한 여러 프로그램이 Atom과 동일한 동작을 보이는 경우 서로 다른 작업 공간에서 실행되는 것을 허용하지 않는다는 중요한 단점을 가지고 있습니다.

답변1

창이 나타날 때까지 기다린 다음 원래 작업 공간으로 보냅니다.

#!/bin/bash

activeworkspace=$(i3-msg -t get_workspaces | jq -c '.[] | select(.focused) | .name' --raw-output)
atom &
windowname=atom
xprop -spy -root _NET_ACTIVE_WINDOW | \
  while read line ; do 
      if xprop WM_CLASS -id ${line##* } | grep -q $windowname ; then
          i3-msg move "[con_id=\"${line##* }\"]" $activeworkspace
          exit
      fi
  done
  • jq예를 들어 먼저 활성 작업공간을 가져옵니다.
  • 백그라운드에서 프로그램을 실행합니다.atom &
  • xprop -spy"속성 변경 이벤트에 대한 창 속성을 항상 확인"하는 데 사용됩니다 .
  • 모든 새로운 활성 창에서 작동while read line
  • WM_CLASS를 사용하여 가져오고 xprop WM_CLASSbash를 사용하여 windowid를 추출합니다.${line##* }
  • 필터grep $windowname
  • 창을 원래 작업 공간으로 이동i3-msg move ..

활성 작업 공간에 있어야 하며 해당 작업 공간의 창에 초점이 맞춰져야 합니다.

여러 개의 원자 창이 있고 새 원자 창의 시작과 이동 사이에 초점이 맞춰지면 작동하지 않습니다. 이 경우 WM_CLASS 대신 NET_WM_PID 원자를 찾아야 합니다.

답변2

특정 작업공간에서 특정 프로그램(예: Atom)을 항상 열고 싶다면, 다음에 설명된 클래스 할당 기능을 사용할 수 있습니다.i3 사용자 문서

터미널에서 실행 xprop하고 창(예: Firefox)을 클릭하여 해당 클래스가 속하는 클래스를 확인하세요. 찾다 WM_CLASS(STRING).

그런 다음 .config 파일에 다음 줄을 추가하는 것만큼 간단합니다.

assign [class="Firefox"] 2 

(기본값)을 사용하여 인스턴스를 다시 시작하는 것을 잊지 마세요.$Mod + Shift + r

이제 Firefox를 언제 어디서 실행하든 항상 Workspace 2에서 열립니다. Atom을 사용하여 동일한 작업을 수행할 수 있으므로 어디에서나 데스크탑을 시작할 수 있습니다.

답변3

주석 처리된 호출은 시작 알림을 지원하는 응용 프로그램에서 작동합니다. 실제로 "작업 공간 3에서 iceweasel 시작(한 번)" 예입니다.사용자 매뉴얼거의 동일한 exec명령이 있습니다.

exec --no-startup-id i3-msg 'workspace 3; exec iceweasel; workspace 1'

그러나 원자시작 알림이 지원되지 않는 것 같습니다따라서 이 방법을 계속해서 사용해야 합니다 assign.

관련 정보