什么是适用于 Linux 的好的外部平板电脑输入设备?
它应该用于更方便地使用 Inkscape 和 Gimp。
一些有用的特性,我想:
开放问题:
我正在编写一个脚本,提示用户输入并在之后进行一些处理。我是read用来获取数据的,但后来我注意到,当脚本使用键盘快捷键运行时(我在 Ubuntu 的键盘快捷键列表中添加了一个条目),它会忽略read并继续执行其余代码。
如何使用像这样在后台运行的脚本读取用户输入?
我遇到了一个非常具体的问题,但是任何帮助都有助于理解 X 与键盘的关系。
我希望能够在 XBMC 播放的音乐之上启动 ElectricSheep 程序。我已经设置了启动脚本,我可以毫无问题地启动 ElectricSheep。
当我尝试关闭它时会出现问题。如果我在没有运行 XBMC 的情况下启动 ElectricSheep,按 Esc 将关闭它。如果 XBMC 正在运行(或者即使我在脚本中包含一行以在启动之前终止 xbmc),它会抓取所有键盘输入,使我离开 ElectricSheep 的唯一途径是从 ssh 会话终止它或终止 X 本身。
如果我在 XBMC 运行时运行 xev,它不会收到任何输入。
有没有办法启动一个应用程序并明确地给它 X 键盘?谢谢你的帮助!
鉴于以下代码,为什么 cat 只在我输入\n或CTRL+后打印管道的内容D?cat 实际打印它读取的内容的条件是什么?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void){
int pid,p[2];
char ch;
pipe(p);
if((pid=fork()) == -1){
fprintf(stderr,"Error:can't create a child!\n");
exit(2);
}
if(pid){
close(p[0]);
while((ch=getchar())!=EOF){
write(p[1],&ch,1);
}
close(p[1]);
wait(0);
}else{
close(p[1]);
close(0);
dup(p[0]);
close(p[0]);
execlp("cat","cat",NULL);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我想通过 SSH 连接到远程机器,但不想输入密码,而是想从另一个文件重定向它。
所以我有一个password.txt存储密码的文件。File.sh是我的 bash 文件。
在 File.sh
#!/bin/bash
ssh -T user@10.2.5.1
Run Code Online (Sandbox Code Playgroud)
在执行文件时,我做了:
./File.sh < password.txt
Run Code Online (Sandbox Code Playgroud)
但我还是被要求输入密码。
如何从文件中获取要输入的密码?
如果我去,/dev/input/by-path我可以看到我的输入外设。
我有一个键盘和一个鼠标,在我的平台上输出是:
pci-0000:05:00.0-usb-0:1.2:1.0-event-kbd
pci-0000:05:00.0-usb-0:1.1:1.0-event-mouse
pci-0000:05:00.0-usb-0:1.1:1.0-mouse
pci-0000:05:00.0-usb-0:1.1:1.1-event-kbd
Run Code Online (Sandbox Code Playgroud)
作为旁注,只有一个open(<path_to_device>, O_RDONLY)用于监听输入(对于键盘来说,它是usb-0:1.2:1.0一个)。
(我正在运行 Ubuntu;以防万一!)
我有一个bash lopp为
#!/bin/bash
for (( c=0; c<=1000000; c++ ))
do
SOME STUFF HERE
done
Run Code Online (Sandbox Code Playgroud)
我通过键盘输入中断长循环,Ctrl+C但Ctrl+C只是终止脚本。我正在寻找一种替代方法来继续当前循环并在完成STUFF当前循环中的运行后中断循环。
我可以
但是当我尝试“解锁”它时,事情变得非常奇怪:我没有办法
fsck 它,也不我需要格式化它,我该怎么办?
这是我的gparted输出:
$ sudo gparted
Created symlink /run/systemd/system/-.mount ? /dev/null.
Created symlink /run/systemd/system/boot-efi.mount ? /dev/null.
Created symlink /run/systemd/system/home-iago\x2dlito-.docker-devicemapper.mount ? /dev/null.
Created symlink /run/systemd/system/home.mount ? /dev/null.
Created symlink /run/systemd/system/run-user-1000.mount ? /dev/null.
Created symlink /run/systemd/system/run-user-117.mount ? /dev/null.
Created symlink /run/systemd/system/tmp.mount ? /dev/null.
Created symlink /run/systemd/system/var.mount ? /dev/null.
======================
libparted : 3.2 # see screenshots
====================== #
Input/output error during write on /dev/mmcblk0 # first error …Run Code Online (Sandbox Code Playgroud) 由于我的二合一敞篷车缺少驱动程序,向后折叠屏幕只会触发盖子开关事件。这会导致笔记本电脑暂停,或者在 Gnome 中禁用“笔记本电脑盖关闭时暂停”时,仍会导致所有输入设备被禁用(包括触摸屏,这会使平板电脑模式无用)。
作为一种解决方法,我想手动处理切换到平板电脑模式。这需要禁止所有盖子开关事件。
如何在 Linux 中完全禁止盖子开关事件?
或者,找到一种列出/禁用响应盖子开关的进程的方法可以解决问题。
目前,在平板电脑模式下折叠屏幕并返回记录以下事件:
Jul 25 23:58:54 jl-xps systemd-logind[816]: Lid closed.
Jul 25 23:58:58 jl-xps systemd-logind[816]: Lid opened.
Run Code Online (Sandbox Code Playgroud)
盖子开关事件映射到/dev/input/event0. /proc/bus/input/devices列表(截断):
I: Bus=0019 Vendor=0000 Product=0005 Version=0000
N: Name="Lid Switch"
P: Phys=PNP0C0D/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input0
U: Uniq=
H: Handlers=event0
B: PROP=0
B: EV=21
B: SW=1
Run Code Online (Sandbox Code Playgroud)
方法1:systemd-inhibit从采取如何禁用自动暂停,当我关闭笔记本盖子?
# systemd-inhibit --what=handle-lid-switch sleep 1m
Run Code Online (Sandbox Code Playgroud)
然后在计时器结束前翻转屏幕。盖子开关事件仍然由 记录systemd-logind,我可以看到/dev/input/event0正在写入(并且其他输入设备仍然被禁用)。
方法二:ACPI
$ echo "LID0" | sudo tee /proc/acpi/wakeup
Run Code Online (Sandbox Code Playgroud)
并检查它是否确实被禁用:
LID0 …Run Code Online (Sandbox Code Playgroud) 根据$ man gawk,该strtonum()函数可以将字符串转换为数字:
strtonum(str)检查 str,并返回其数值。如果 str 以前导 0 开头,则将其视为八进制数。如果 str 以前导 0x 或 0X 开头,则将其视为十六进制数。哦?否则,假设它是一个十进制数。
如果字符串0以前导 开头,则将数字视为八进制,而如果以 开头,0x则将其视为十六进制。
我已经运行这些命令来检查我对函数的理解:
$ awk 'END { print strtonum("0123") }' <<<''
83
$ awk 'END { print strtonum("0x123") }' <<<''
291
Run Code Online (Sandbox Code Playgroud)
该字符串"0123"被正确地视为包含八进制数并转换为十进制数83。同样,字符串"0x123"被正确地视为包含十六进制数并转换为十进制数291。
现在,如果我运行相同的命令,但将数字字符串从程序文本移动到输入数据,会发生以下情况:
$ awk 'END { print strtonum($1) }' <<<'0123'
123
$ awk 'END { print strtonum($1) }' <<<'0x123'
291
Run Code Online (Sandbox Code Playgroud)
我理解第二个结果,它与前面的命令相同,但我不理解第一个。为什么 gawk 现在将其0123视为十进制数,即使它以0 …