如何在登录时设置Xmodmap?


46

由于我的键盘布局不适合我,因此我xmodmap在登录时运行。该脚本已命名.profile,可以正常运行,但会中断Unity接口。

我想知道在哪里放置该xmodmap行,以便它在我的登录时执行,并且不会破坏任何内容。

我已经尝试将其放在.bash_login.bash_profile文件中,但没有成功(xmodmap未设置键盘)。

我有什么选择?


4
它如何破坏统一界面?
djeikyb 2011年

1
我想补充一点,如果您的xmodmap执行时间太长,则应删除所有未手动修改的条目。仅在输入文件中保留更改将使xmodmap运行更快。
2016年

Answers:


29

可以放置正确的位置xmodmap ~/.Xmodmap(以便在启动时读取更改)~/.xinitrc(请参见下面的说明),尽管您也可以将xmodmap命令作为启动项(/usr/bin/xmodmap /home/user/.Xmodmap)放置。我可以说,对于12.04(大概是12.10)来说,这两种选择确实可以工作,因为您使用登录会以两种方式读取它们lightdm。(我更改了Return to Right Shift,并且更改仅在输入密码并登录后才生效)。

请注意:如果您使用的是Xfce,则在Xfce 官方FAQ中会指出,您可能必须创建启动项而不是使用~/.xinitrc,并且可能必须延迟执行,以免xmodmap更改被覆盖setxkbmap。您可以在启动项中使用延迟来实现此目的:

/bin/bash -c "sleep 20; /usr/bin/xmodmap /home/$USER/.Xmodmap"

(对于启动项,必须指定绝对路径)

每次setxkbmap运行以更改键盘布局时,您都必须xmodmap ~/.Xmodmap在终端中再次运行。

创造 ~/.xinitrc

建立在你家一个文件夹叫.xinitrc

touch .xinitrc

并放在其中:

xmodmap ~/.Xmodmap

你的Xmodmap文件应该不会有条目xmodmap -e " "作为在终端用于暂时设定值的风格。它必须具有以下格式的条目:

keycode 65 = Tab
keycode 23 = Space

它经常被混淆,各种的X文件(如.xprofile.xinitrc等),在启动时被读取,但.xinitrc似乎到12.04之下仍读,而.Xmodmap.xinputrc不被自己阅读。


5
请注意,如果你进行更改xmodmap -e '...,您可以检索正确的格式xmodmap .Xmodmapxmodmap -pke,它会显示当前的映射-虽然你将要过滤下来只适用于你所做的更改线路。
巴里·凯利

1
这对我没有用。我已经创建了.Xmodmap和.xinitrc | 然后我将xmodmap〜/ .Xmodmap放到.xinitrc中,然后在.Xmodmad中,我有键码166 =先前的键码167 =下一步
miguelmorales85

它是.xinitrc似乎在Ubuntu 17.10中不再自动启动。您必须使用以下命令自动启动它:/ bin / bash -c“ sleep 15 && /home/USERNAME/.xinitrc”
thebunnyrules

9

我正在使用ElementaryOS(及其基于GNOME的窗口管理器),并通过使用xdg自动启动脚本找到了解决方案。许多窗口管理器都在使用xdg,因此我认为这种方法也可以在其他环境中使用。至少它应该与GNOME一起使用。

~/.config/autostart在X会话中登录后,xdg会运行脚本。要在登录时加载xmodmap配置,请将以下脚本添加到~/.config/autostart/xmodmap.desktop

[Desktop Entry]
Name[en_US]=Xmodmap
Comment[en_US]=xmodmap ~/.Xmodmap
Exec=/usr/bin/xmodmap .Xmodmap
Icon=application-default-icon
X-GNOME-Autostart-enabled=true
Type=Application

然后注销并再次登录,您的Xmodmap配置应该已经加载。

如果它不起作用,请尝试在终端中运行xmodmap,以查看是否出现xmodmap抱怨:

$ xmodmap ~/.Xmodmap

如果没有任何错误,请运行以下命令进行调试:

$ sudo cat /var/log/syslog | grep -B 5 -A 5 xmodmap

在Linux Mint 17(基于Ubuntu 14.04.5)上,使用~/.xinitrc文件失败后,自动启动方法对我来说非常理想。正如hxpax指出的那样,Mint用户(可能是大多数/所有Debian衍生的Linux)可以使用GUI对话框通过来添加自动启动条目Main Menu --> Preferences --> Startup Applications
mattst

2
工作过的ubuntu 18.04
TooTone

2

我现在没有统一界面,但是尝试单击启动器上的“应用程序”按钮,然后键入启动。应该有一个名为“启动应用程序”的应用程序(或类似的应用程序)。单击它并添加您的xmodmap命令(例如xmodmap /home/thiago/.Xmodmap)。


我试过一阵子,但是对我来说没有用。我现在在Windows上,但稍后再试,如果可行,我会在这里报告。thx
Thiago Moraes

2
@Thiago Moraes这个基本命令是否有效(如果不起作用,请发布错误)?xmodmap .Xmodmap
djeikyb

+1确实有效。更明确地说,我使用了.Xmodmap的完整路径
所有权

3
这行不通。我正在使用16.04
miguelmorales85 '16

@ miguelmorales85基本命令在您的终端机上工作吗?您尝试使用绝对路径吗?
djeikyb

2

在Mint 17/18上,我可以实现将脚本放到Startup Application中的时间为1秒。

由于Mint 18是从Ubuntu 1604衍生而来的,我想您可以这样做,或者如果它不存在,请先安装启动应用程序管理面板。

希望能帮助到你。


+1运作良好。我需要在Linux Mint的17无延迟
mattst

@mattst是的,延迟是可选的。
hxpax

我需要5秒钟的延迟才能正常工作。因此,我使用了以下启动Shell脚本:gist.github.com/ghagerer/58212241e37229f9d6fe3a133b34be97
Gerhard Hagerer,

0

我对上面的任何建议都不满意(.bashrc选项实际上并不可行,因为它在每个新终端上都运行xmodmap)

我触摸了xmodstartup.sh主文件夹中的一个脚本

  #!/bin/bash           
  sleep 1;               
  echo "running xmodmap" 
  xmodmap ~/.Xmodmap     

保存下来,然后我做了 sudo chmod +x xmodstartup.sh

然后我只是将可执行文件添加到gnome的“启动应用程序首选项”窗口中。BISH波什,英语布局ÿ西班牙语的altgr:)


-1

放入xmodmap更改~/.bashrc/etc/bash.bashrc不会破坏任何内容。

唯一的缺点是每次启动后都必须打开终端才能激活它。


3
我已经在这样做了,但是问题是我打开的每个终端都执行了该命令。这只是片刻,但有点烦人,我希望有一个真正的解决方案。不管怎么说
Thiago Moraes
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.