Ну, вы, ребята, отстой:P Это было своего рода определенная и нишевая, но я не буду держать это против вас;)
Во всяком случае, для полного сбоя.
Я купил этот аккуратный маленький блок, который описывает себя как «без водителя», как в оригинальном посте. Это означает, что он действует как клавиатура USB (и регистрируется как таковой в /dev /input /event *).
Это сделало его практически бесполезным для меня, так как я не мог взаимодействовать с устройством каким-либо образом, когда экран блокировки был активен, мне нужно было считывать нажатия клавиш с устройства, поскольку они «вводятся» читателем Cat-ing /dev/input/event3
(мой читатель) дал мне мусор, или я так думаю.
Затем я наткнулся на этот кусок кода здесь: http://itech-planet.net/content/reading-device-input-directly-fromto-devinputeventx-ubuntu-c без? Автор, которого я вижу, но большая часть заслуг в этом приложении принадлежит ему / ей. Спасибо!
Упрощая этот код, я смог прочитать необработанный ввод с моей собственной клавиатуры. Секретная фраза была «секретной» и продолжала записывать нажатия клавиш в переменную и искать, когда нажал «ввод», чтобы проверить строку по сохраненному значению. для кода.
Этот код - по сути прославленный кейлоггер, указывающий на другую «клавиатуру» и сканирующий то, что он «печатает», на соответствующую фразу.
Очень похоже на то, как ФБР отсеивает миллионы AOL IM от 13-летней девушки, которая ищет террористов!
Когда он находит соответствующую фразу, он запускает оператор if и запускает остальную часть соответствующего кода. Я прокомментировал это как можно лучше, если у вас есть какие-либо проблемы, пишите мне по электронной почте /pm /im /.
Не то, чтобы вы читали что-либо из этого, вы просто хотите код! Ну, вот оно!
Использование:
sudo ./[file] -u [ваше имя пользователя] -d [местоположение на устройстве] -t [идентификатор тега]
Так что я, будучи Тайлером, с моим устройством в /dev /input /event3 и моим тегом 0000996716 должен иметь:
sudo ./input -u Тайлер -d /dev /input /event3 -t 0000996716
КОД:
#include <linux/input.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int getStatus(){
FILE *fp;
char path[128];
fp = popen("sudo -u tyler gnome-screensaver-command -q", "r");
fgets(path, sizeof(path)-1, fp);
pclose(fp);
printf("%s\n",path);
if(strcmp("The screensaver is inactive\n",path)==0)
return 1;//if screensaver is disabled
else if(strcmp("The screensaver is active\n",path)==0)
return 0;//if screensaver is enabled
else
return -1;//wat
}
int main(int argc, char **argv)
{
//char array that stores the keys in order up to like 40 something, DO NOT MESS WITH THE ORDER OF THIS ARRAY. ITS IMPORTANT.
char arr[]={' ',' ','1','2','3','4','5','6','7','8','9','0','-','=','\b','\t','q','w','e','r','t','y','u','i','o','p','[',']','\n',' ','a','s','d','f','g','h','j','k','l',';',',','`',' ','\\','z','x','c','v','b','n','m',',','.','/',' ','*',' ',' '};
char inp[256];//input string to check what you type.
int fd;//file pointer to the /dev/input device
char usr[32];//stores your username to run screensaver command as you. Root user (sudo) can NOT lock the screen.
char tag[32];//stores the tag ID for the RFID
char dev[32];//stores the device location, /dev/input/eventX
char lcom[96];//locking command builder string
char ucom[96];//unlocking command builder string
//processes arguments, dont ask.
int idx = 0;
for (idx = 1; idx < argc; idx++) {
if (strcmp(argv[idx], "-u") == 0) {
strcpy(usr,argv[idx+1]);
printf("User = %s\n", usr);
} else if (strcmp(argv[idx], "-t") == 0) {
strcpy(tag,argv[idx+1]);
printf("Tag = %s\n", tag);
} else if (strcmp(argv[idx], "-d") == 0) {
strcpy(dev,argv[idx+1]);
printf("Device = %s\n", dev);
fd = open(dev, O_RDONLY);
} else {}
}
//build commands
strcpy(lcom,"sudo -u ");
strcat(lcom,usr);
strcat(lcom," gnome-screensaver-command -l");
strcpy(ucom,"sudo -u ");
strcat(ucom,usr);
strcat(ucom," gnome-screensaver-command -d");
struct input_event ev;
int cursor=0;
while (1)
{
read(fd, &ev, sizeof(struct input_event));
if(ev.type == 1)//only key ID event
if(ev.value == 0)//only not repeat
if(ev.code== 28||ev.code==14){//if code is enter or bsp, reset the counter and compare
inp[cursor]='\0';//terminate string
cursor=0;
if(strcmp(inp,tag)==0){//if input string equals tag, strcmp works funny lol
int status=getStatus();//find out what the screensaver is doing
if(status==1){//screensaver is unlocked, so lock it
printf("Locking...");
system(lcom);}
else if(status==0){//screensaver is locked, so unlock it!
printf("Unlocking...");
system(ucom);}
else printf("Wat happened");//???
}
}
else{//if not enter or bsp, log it
inp[cursor]=arr[ev.code];
cursor++;
}
//fflush(stdout);this was here for debug purposes, since apparently I dont know how STDOUT works lol
}
}