Windows에서 불과 2 일 전에 Ubuntu 16.04로 마이그레이션했습니다. Unity 데스크톱을 커스터마이즈 할 수있는 방법이 마음에 듭니다. 저는 데스크탑 환경의 모양과 느낌을 가지고 놀고 있습니다. Windows에서와 마찬가지로 화면 하단에 런처가 있기를 원했습니다. 인터넷 검색에서 다음과 같은 명령을 찾았습니다.
gsettings set com.canonical.Unity.Launcher launcher-position Bottom
또한 작업을 완료하기위한 unity-tweak-tool 및 dconf 편집기가 있습니다. 그러나 이것들은 일을 처리하는 GUI 접근 방식입니다.
내 질문은 다음과 같습니다.
여기에 대한 대답 은 프로세스의 표준 파일 설명자를 얻는 방법을 알려줍니다. 그러나 나는 출력에서 아무것도 얻지 못했습니다.
또한이 strace -p pid -o output.txt
명령은 파일에 엄청난 양의 텍스트를 던집니다.
요컨대, GUI 응용 프로그램을 사용하여 명령 줄에서 작업하는 것과 동일한 작업을 수행합니까?
이러한 GUI 기반 응용 프로그램도 백그라운드에서 동일한 명령을 실행합니까?
예, 아니오. dconf
설정 데이터베이스에 기록 하지만 다른 방법을 사용할 수 있습니다. Python으로 작성된 프로그램은 gi.repository.Gio
모듈을 사용하거나 (많이 사용하기 때문에 알고 있음) 대신 gsettings
을 호출하여 외부 명령으로 사용할 수 있으며 subprocess.Popen(['gsettings','org.some.schema','some-key','value'])
기본적으로 쉘 명령으로 실행됩니다. AC 프로그램은 비슷한 것을 사용 gio.h
하거나 아마도 라이브러리를 사용하거나 파이썬에서 exec()
와 같은 일을하기 위해 함수 패밀리를 사용할 수도 있습니다 Popen
. 따라서 제목 질문에 답하려면 "GUI 기반 애플리케이션이 백그라운드에서 셸 명령을 실행합니까?" 가능하지만 앱이 작성된 모든 언어에 대한 라이브러리가 있기 때문에 필요하지 않을 수 있으며 새 프로세스를 생성하는 것보다 라이브러리 함수를 사용하는 것이 조금 더 빠를 것입니다.
라이브러리 / 모듈로 수행되는 방법에 대한 샘플을 제공하려면 내 런처 목록 표시기 의 소스 코드를 살펴보십시오 . 거기에 Gio.Settings
클래스 의 인스턴스를 생성하고 원하는 목록 유형에 따라 Unity 런처를 수정하는 데 사용 하는 함수를 작성했습니다 .
이러한 응용 프로그램의 내부 작업을 엿보는 방법은 무엇입니까? 내 말은, 버튼을 클릭 할 때마다 실행되는 명령을 실제로 볼 수있는 방법이 있습니까?
아니요. 버튼을 누르거나 창 요소를 클릭 할 때 해당 앱의 프로그래밍 언어에서 어떤 명령이 실행되는지 확인하려면 불가능합니다. 가능한 경우 응용 프로그램의 소스 코드를 읽으십시오. 를 사용 dconf watch /
하여 변경되는 설정을 볼 수 있지만 수행 방법은 볼 수 없습니다.
기술적으로 디버거 작동 방법을 알고 메모리 주소를 읽고 어셈블리 언어를 알고 있다면 앱이 CPU 및 메모리 수준에서 수행하는 작업을 알 수 있습니다. 이를 소프트웨어 리버스 엔지니어링이라고하며 보안 전문가가 악성 소프트웨어를 분석하고 합법적 인 소프트웨어의 취약점을 발견하기 위해 자주 사용합니다.
이러한 응용 프로그램은 백그라운드에서 터미널을 열고 이러한 명령을 실행합니까?
아니요, 연결된 터미널이 없습니다. 많은 프로그램 dconf
이 사용자 의 데이터베이스 위치를 알고 거기에 작성합니다. dbus
프로그램이 신호를 보낼 수있는 프로세스 간 통신 버스도 있습니다 . 프로그램은 "이봐, 저에게 메시지입니다!"
응용 프로그램이 다른 응용 프로그램을 실행할 수 있습니까? 예, 표준 fork()
및 execve()
시스템 호출을 통해 수행됩니다 . Linux 및 기타 * nix 시스템에서 프로세스를 만드는 본질은 주로이 두 가지를 기반으로합니다. 내장되지 않은 명령을 실행하기위한 쉘 메커니즘은 특히이를 많이 사용합니다. 대화 형으로 실행할 때
$ ls
쉘은를 통해 새로운 프로세스를 생성 할 것이며 fork()
, 그 프로세스 execve()
는 시작될 것 ls
입니다. execve()
새로운 분기 된 프로세스가 어떻게 될 것이기 때문 ls
입니다. pipe()
시스템 호출의 출력을 다시 읽어 도움이 될 것입니다 ls
. 파이프 메커니즘이 작동하는 방식을 이해하기 위해 파이프와 리디렉션의 차이점은 무엇입니까?에 대한 내 대답을 읽는 것이 좋습니다. 이는 단순한 |
연산자가 아니라 실제로 시스템 호출입니다.
응용 프로그램이 셸 명령을 실행할 수 있습니까? 아니요. 셸 구문은 셸 자체에서만 이해됩니다. 그러나 할 수있는 일은 명령 줄 -c
스위치 로 셸을 시작하고 적절한 명령을 제공하는 것입니다. 사용자 지정 바로 가기는 실행 파일에서 작동하고 구문을 이해하기위한 쉘이 없기 때문에 GNOME 또는 기타 데스크탑 환경에서 설정된 사용자 지정 바로 가기에 자주 사용됩니다. 따라서 예를 들어 bash -c 'xdotool key Ctrl+Alt+T'
간접적으로 xdotool
명령을 실행하거나 bash -c 'cd $HOME/Desktop; touch New_File'
바로 가기를 통해 데스크톱에 새 파일을 만들 수 있습니다. 이것은 쉘을 명시 적으로 사용하고 있기 때문에 쉘 변수를 사용할 수 있다는 점에서 특히 흥미로운 예입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다