xset을 사용하여 설정된 정확한 속성을 어떻게 볼 수 있나요?

xset을 사용하여 설정된 정확한 속성을 어떻게 볼 수 있나요?

X 입력 장치를 구성하고 테스트하는 두 가지 주요 유틸리티 xinputxset.

(내가 알 수 있는 한) 둘 사이의 주요 차이점은 xinput(아마도 장치에 따른) 속성을 보다 세밀하게 제어할 수 있다는 것입니다. 반면에 때로는 주어진 설정을 살펴보는 것이 xset좋은 출발점이 될 수도 있습니다.

내가 하고 싶은 일은 주어진 설정으로 시작 xset하고 거기에 약간의 조정을 적용하여 작업하는 것입니다 xinput.

문제는 에서 얻은 구성이 xset에서 등록되지 않은 것 xinput같고 xset매뉴얼 페이지에서 생성된 설정에 대한 정확한 세부 정보를 제공하지 않는다는 것입니다.

예를 들어, 터치패드의 속도를 변경하고 싶다고 가정해 보겠습니다. xinput --list관련 장치 ID가 15라는 것을 알고 있으므로 이를 사용하여 xinput --list-props 15모든 터치패드 속성을 나열할 수 있습니다. 이제 를 사용하여 일정한 감속(이 경우 ID 276)을 1.5 값으로 변경하는 등 특정 속성을 변경할 수 있습니다 xinput --set-prop 15 276 1.5.

그러나 xset mouse 5 5그것은 또한 꽤 좋은 속도 설정을 제공합니다. 이 명령을 사용하여 구성된 정확한 구성을 알고 싶었지만 실행한 xinput --list-props 15후에는 xset mouse 5 5아무런 차이가 없었습니다 . 이 정보를 어떻게 얻을 수 있나요?

답변1

완전한 답변은 아니지만 소스 코드를 보고 몇 가지 세부 사항을 알아냈습니다.

xset파일의 소스 코드를 살펴보니 xset.c패키지에서 가져온 것입니다 x11-xserver-utils. 내 시스템(Ubuntu 16.04)에 다운로드한 파일의 코드가 apt-get source x11-xserver-utils발견된 것과 거의 동일합니다.여기이므로 해당 페이지의 코드를 참조로 사용하겠습니다.

옵션이 제공되면 어떤 일이 발생하는지 mouseL475-502에서 볼 수 있습니다(편집: 업데이트된 참조 L450-475에서).

/*  Set pointer (mouse) settings:  Acceleration and Threshold. */
  else if (strcmp(arg, "m") == 0 || strcmp(arg, "mouse") == 0) {
    acc_num = SERVER_DEFAULT;             /* restore server defaults */
    acc_denom = SERVER_DEFAULT;
    threshold = SERVER_DEFAULT;
    if (i >= argc){
      set_mouse(dpy, acc_num, acc_denom, threshold);
      break;
    }
    arg = argv[i];
    if (strcmp(arg, "default") == 0) {
      i++;
    } 
    else if (*arg >= '0' && *arg <= '9') {
      acc_denom = 1;
      sscanf(arg, "%d/%d", &acc_num, &acc_denom);
      i++;
      if (i >= argc) {
       set_mouse(dpy, acc_num, acc_denom, threshold);
       break;
      }
      arg = argv[i];
      if (*arg >= '0' && *arg <= '9') {
       threshold = atoi(arg);  /* Set threshold as user specified.  */
       i++;
      }
    }
    set_mouse(dpy, acc_num, acc_denom, threshold);
  }

으로 SERVER_DEFAULT설정되어 있습니다 -1. 이것은 단지 매개변수를 읽고 호출하는 것입니다 set_mouse. 다른 매개변수가 지정되지 않은 경우(명령은 로 호출됨 xset mouse) 기본값은 입니다 xset mouse -1/-1 -1. 또한 acc_num및는 0에서 9 사이여야 합니다. 그렇지 않으면 threshold기본값(및의 경우 1)이 사용됩니다.-1acc_denom

이 함수는 set_mouse잘못된 입력 값에 대한 일련의 검사를 다시 수행합니다.

set_mouse(Display *dpy, int acc_num, int acc_denom, int threshold)
{
int do_accel = True, do_threshold = True;

if (acc_num == DONT_CHANGE)        /* what an incredible crock... */
  do_accel = False;
if (threshold == DONT_CHANGE)
  do_threshold = False;
if (acc_num < 0)                   /* shouldn't happen */
  acc_num = SERVER_DEFAULT;
if (acc_denom <= 0)                /* prevent divide by zero */
  acc_denom = SERVER_DEFAULT;
if (threshold < 0) threshold = SERVER_DEFAULT;
XChangePointerControl(dpy, do_accel, do_threshold, acc_num,
                    acc_denom, threshold);
return;
}

이제 공이 패스되었습니다 XChangePointerControl. 그러나 이 기능은 이 패키지에 정의되어 있지 않습니다. 포함된 종속성에 대한 일부 검색을 통해 libx11파일이 포함된 패키지 ChPntCont.c(소스 코드) 로 이동했습니다.여기), 이 함수를 정의합니다.

int
XChangePointerControl(
     register Display *dpy,
     Bool do_acc,
     Bool do_thresh,
     int acc_numerator,
     int acc_denominator,
     int threshold)

{
    register xChangePointerControlReq *req;

    LockDisplay(dpy);
    GetReq(ChangePointerControl, req);
    req->doAccel = do_acc;
    req->doThresh = do_thresh;
    req->accelNum = acc_numerator;
    req->accelDenum = acc_denominator;
    req->threshold = threshold;
    UnlockDisplay(dpy);
    SyncHandle();
    return 1;
}

그 외에는 별로 이해가 되지 않았습니다. 우리는 패키지 내의 파일에 있는 매크로에 의해 GetReq정의된 여러 가지 다른 기능 사이를 전환합니다 . 하지만 결국에는 입력 값이 터치패드 장치의 비슷한 이름의 속성에 대한 새 값으로 직접 제공되는 것처럼 보이기 때문에 위 함수에서 충분한 정보를 얻었을 것입니다.Xlibint.hlibx11

위의 내용은 최소한 의 기본값과 허용되는 값에 대해 알려줍니다 xset.

xinput list-props속성이 변경된 후 출력이 업데이트되지 않는 이유를 알 수 없었습니다 xset.

관련 정보