열려있는 모든 터미널의 터미널 색상을 동적으로 전환하는 방법은 무엇입니까?

열려있는 모든 터미널의 터미널 색상을 동적으로 전환하는 방법은 무엇입니까?

Ubuntu/Fedora에서 gnome-terminal을 사용하고 있습니다. 내가 사용한 색 구성표의 경우16 베이스 쉘, 그리고 내 편집기 vi에 대한 해당 설정입니다.

.bashrc시작 시 base16 테마를 설정하도록 구성했습니다 . 가끔 bashrc 파일을 변경하여 테마를 전환합니다. 가끔씩 색상 구성표를 변경할 수 있고 .bashrc이후의 모든 창이 올바른 색상으로 열리므로 가끔씩 색상 구성표를 변경하는 데 적합합니다 .

내가 원하는 것?

gnome-terminal한 번의 클릭/명령으로 열려 있는 모든 창의 색 구성표를 변경할 수 있기를 원합니다 . 이를 수행할 수 있는 방법이 있습니까?

내 작업 흐름 정보

나는 일반적으로 서로 다른 설정으로 여러 개의 터미널 창을 열어 둡니다. 그 중 일부는 텍스트 편집기가 열려 있고 일부 텍스트 편집기 프로그램(vim)은 백그라운드에서 실행되어 동일한 터미널 창에서 여러 텍스트 편집기로 멀티태스킹을 할 수 있습니다. 방의 조명에 따라 두 가지 색 구성표, 즉 낮/밝은 방을 위한 밝은 구성과 야간/조명이 어두운 방을 위한 어두운 구성 사이를 전환하는 것이 가장 좋습니다.

색 구성표를 전환하기 위해 열려 있는 모든 터미널 창에 명령을 입력할 필요가 없습니다. 또한 일부 프로그램이 포그라운드에서 실행 중일 수 있으며 이를 중단하고 싶지 않을 수도 있습니다. 사용자 정의 색 구성표로 전환하도록 터미널에 "알리는" 방법이 있습니까?

포그라운드에서 활발하게 실행 중인 프로그램이 있는 터미널에서는 이 작업을 수행하는 것이 어려울 수 있다는 것을 알고 있습니다. 그러나 최소한 백그라운드에 프로그램이 있거나 명령이 실행되지 않는 다른 모든 터미널에 대해서는 이 작업을 수행할 수 있습니다.

도움이 된다면 다른 터미널도 알아보고 싶습니다. 그놈 터미널 프로필을 사용하려고 생각했지만 원하는 것을 달성하는 방법을 알 수 없는 것 같습니다.

미리 감사드립니다!

답변1

대부분의 GNOME 응용 프로그램과 마찬가지로 GNOME 터미널의 설정은 dconf 데이터베이스에 저장됩니다. 명령 dconf이나 더 높은 수준의 대안을 사용하여 설정을 쿼리하거나 변경할 수 있습니다 gsettings.

그놈 터미널은 다양한 구성 파일을 지원합니다. 모든 기존 창에서 프로필을 전환하도록 지시할 수는 없지만 언제든지 프로필 속성을 다시 정의할 수 있습니다.

터미널은 기본 데이터베이스에 대한 변경 사항을 자동으로 즉시 선택합니다.

예를 들어 를 사용하여 데이터베이스를 덤프하고 dconf dump / > outputfile그놈 터미널의 기본 설정 대화 상자에서 일부 값을 변경한 다음 이전 명령을 반복하고 두 출력을 비교하여 차이점을 찾습니다.

다음 명령을 사용하여 프로그래밍 방식으로 값을 변경할 수 있습니다.

dconf write /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/background-color "'rgb(200,210,220)'"

foreground-color,필드도 비슷합니다 palette.

더 많은 표준 #rrggbb표기법도 적용됩니다.

중첩된 따옴표를 참고하세요. 쉘은 외부 따옴표를 제거하고 설정한 실제 값에도 따옴표가 포함되어야 합니다.

기본이 아닌 프로필을 사용하는 경우 해당 프로필의 ID는 귀하의 프로필과 다릅니다.


또 다른 가능한 접근법:

OSC 4, 10, 11 이스케이프 시퀀스를 사용하면 색상 런타임을 재정의할 수 있습니다. 적어도 GNOME 터미널의 경우 이는 터미널 설정보다 우선합니다.

아래의 모든 항목을 반복 /dev/pts하고 이러한 이스케이프 시퀀스를 모든 항목에 내보냅니다. 예를 들어:

printf '\e]11;#abcdef\e\\' > /dev/pts/17

이러한 항목 중 일부는 다른 사용자의 것이므로 해당 항목에 대한 권한이 거부됩니다. 일부는 다른 터미널에 속하므로 이러한 시퀀스를 인식하지 못할 수도 있습니다.

터미널에서 진행 중인 활동이 멀티바이트 UTF-8 시퀀스 또는 이스케이프 시퀀스 중간에 있을 수 있으며 이를 인터리브할 수 있습니다. 이 경우 내부에서 실행 중인 애플리케이션의 출력이 손상된 것을 볼 수 있습니다.

나는 터미널이 이러한 OSC 시퀀스를 지원하지만 런타임에 설정을 수정하는 다른 보다 안전한 방법을 허용하지 않는 사용자에게 이 방법을 권장합니다.

관련 정보