在 Ubuntu 18.04 中,如果我单击Super+ Space(其中Super可以是标有 Windows 徽标的键),我可以更改键盘布局,然后是窗口覆盖或通知(或任何你想调用的名称),如下所示:
作为 Windows 时代的遗留物,我还映射了Left Alt+Shift以更改键盘布局 - 它确实如此,但没有提升上述窗口/通知。
有没有办法设置 Gnome3,这样当我点击Left Alt+时也会引发这个键盘布局窗口/通知Shift?
我在 Ubuntu 18.04 上,这里的默认 VLC 是:
$ vlc --version
VLC media player 3.0.4 Vetinari (revision 3.0.4-0-gf615db6332)
...
$ which vlc
/usr/bin/vlc
我想保留这个版本,然后尝试每晚通过snap
. 所以我尝试了:
$ sudo snap install --channel=edge vlc
vlc (edge) 4.0.0-dev-5939-gee31d91 from VideoLAN✓ installed
$ snap list
Name Version Rev Tracking Publisher Notes
core 16-2.36.3 6130 stable canonical✓ core
...
vlc 4.0.0-dev-5939-gee31d91 767 edge videolan✓ -
现在我知道我已经vlc
安装了这个开发版本,它在我的系统中:
$ ls -la /snap/bin/
total 8
drwxr-xr-x 2 root root 4096 Jan 4 09:25 .
drwxr-xr-x 13 root root 4096 Jan 4 09:25 ..
...
lrwxrwxrwx 1 root root 13 Jan 4 09:25 vlc -> /usr/bin/snap
但是/snap/bin/vlc
(显然)是一个符号链接/usr/bin/snap
,所以当我运行它时:
$ /snap/bin/vlc
cannot change current working directory to the original directory: No such file or directory
所以当我输入 时vlc
,我仍然得到旧的 Debian 版本,这就是我想要的。
但是在这种情况下如何运行snap
VLC 版本呢?
考虑下面粘贴的源代码test.vala
。这是一个简单的应用程序,它应该在顶部栏/面板上显示一个图标,当单击该图标时,它应该显示一个包含一个项目的菜单(打开),当您单击打开时,它应该显示一个包含多个项目的子菜单. 我编译这个:
$ cat /etc/issue
Ubuntu 18.04.1 LTS \n \l
$ uname -a
Linux MyPC 4.15.0-38-generic #41-Ubuntu SMP Wed Oct 10 10:59:38 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
$ printf 'Desktop: %s\nSession: %s\n' "$XDG_CURRENT_DESKTOP" "$GDMSESSION"
Desktop: ubuntu:GNOME
Session: ubuntu
$ gnome-shell --version
GNOME Shell 3.28.3
...我编译:
valac -X -D'GETTEXT_PACKAGE="my-indicator"' -D NEWMETHOD --pkg=gtk+-3.0 --pkg appindicator3-0.1 test.vala
...为此,您还需要安装libappindicator-dev 包。
然后我运行应用程序:
$ ./test
main() ...
Main(): ok
Creating MainWindow
^C
...我得到的结果显示在这个动画 gif 上:
请注意,显示了 appindicator 图标(如预期的那样),单击它时会显示带有“打开”项的一级菜单(如预期的那样) - 但是当我单击“打开”时,我并没有真正得到子菜单我预计; 相反,它似乎试图打开子菜单,然后立即关闭?
我需要做什么才能让这个应用程序正确打开子菜单?
这里是test.vala
:
// build with:
// valac -X -D'GETTEXT_PACKAGE="my-indicator"' --pkg=gtk+-3.0 --pkg appindicator3-0.1 test.vala
// "It's not possible to define a preprocessor symbol inside the Vala code (like with C). The only way to define a symbol is to feed it through the valac option -D."
// valac -X -D'GETTEXT_PACKAGE="my-indicator"' -D NEWMETHOD --pkg=gtk+-3.0 --pkg appindicator3-0.1 test.vala
// see also: https://valadoc.org/gtk+-3.0/Gtk.MenuItem.html
using GLib;
using Gtk;
using AppIndicator;
public Main App;
public const string AppName = "Test";
extern void exit(int exit_code);
public class MyIndicator: GLib.Object{
protected Indicator indicator;
protected string icon;
protected string name;
public MyIndicator(){
App.my_indicator = this;
this.name = "My Indicator";
this.icon = "account-logged-in"; // looks like a checkmark
this.indicator = new Indicator("my_indicator", icon, IndicatorCategory.APPLICATION_STATUS);
indicator.set_status(IndicatorStatus.ACTIVE);
var menu = new Gtk.Menu();
// open -------------------------------------
#if NEWMETHOD
var item = new Gtk.MenuItem.with_label(_("Open"));
#else
var item = new Gtk.ImageMenuItem.with_label(_("Open"));
#endif
menu.append(item);
var item_open = item;
item.set_reserve_indicator(false);
item.activate.connect(() => {
var submenu = new Gtk.Menu();
submenu.reserve_toggle_size = true;
//var dummy_window = new Gtk.Window();
//Gtk.Image icon = null;
int i;
for (i = 0; i < 10; i++) {
#if NEWMETHOD
var subitem = new Gtk.MenuItem.with_label ( "Exit %d".printf(i) );
#else
var subitem = new Gtk.ImageMenuItem.with_label ( "Exit %d".printf(i) );
#endif
subitem.set_reserve_indicator(true);
submenu.append(subitem);
subitem.activate.connect(() => {
App.exit_app();
exit(0);
});
//subitem.activate();
}
submenu.show_all();
item_open.set_submenu(submenu);
});
item.activate(); // so it shows submenu triangle
indicator.set_menu(menu);
menu.show_all();
}
}
public class Main : GLib.Object{
public MyIndicator my_indicator;
public static int main (string[] args) {
stdout.printf("main() ... \n");
stdout.flush();
Gtk.init(ref args);
App = new Main(args);
bool success = App.start_application(args);
App.exit_app();
return (success) ? 0 : 1;
}
public Main(string[] args){
stdout.printf("Main(): ok\n");
stdout.flush();
}
public bool start_application(string[] args){
stdout.printf("Creating MainWindow\n");
stdout.flush();
new MyIndicator(); // var ind = new MyIndicator();
//start event loop
Gtk.main();
return true;
}
public void exit_app (){
stdout.printf("exit_app()\n");
stdout.flush();
Gtk.main_quit ();
}
}
我有一台并排安装 32 位和 64 位 Ubuntu 14.04 的笔记本电脑。我刚刚注意到我在这些操作系统上有不同的内核版本(见下面的日志):
我的问题是 - 这是预期/正常的吗?我可以从下面的日志中看到,32 位版本声称内核来自linux-generic-lts-vivid
,而 64 位版本来自linux-generic-lts-wily
(两者都不是-trusty
,实际上都比它晚 - 但两者都来自trusty-security
?!)。
我真的不记得我是否安装了导致这种状态的东西。将它们都获得相同内核版本的推荐方法是什么?
日志,32 位:
+ uname -a
Linux mypc 3.19.0-58-generic #64~14.04.1-Ubuntu SMP Fri Mar 18 19:05:42 UTC 2016 i686 i686 i686 GNU/Linux
+ cat /etc/issue
Ubuntu 14.04.4 LTS \n \l
+ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.4 LTS
Release: 14.04
Codename: trusty
+ apt-show-versions -r linux
intel-linux-graphics-installer:i386 1.1.0-0intel1 installed: No available version in archive
libselinux1:i386/trusty-updates 2.2.2-1ubuntu0.1 uptodate
linux-firmware:all/trusty-security 1.127.20 uptodate
linux-generic-lts-vivid:i386/trusty-security 3.19.0.58.41 uptodate
linux-headers-3.19.0-58:all/trusty-security 3.19.0-58.64~14.04.1 uptodate
linux-headers-3.19.0-58-generic:i386/trusty-security 3.19.0-58.64~14.04.1 uptodate
linux-headers-generic-lts-vivid:i386/trusty-security 3.19.0.58.41 uptodate
linux-image-3.19.0-58-generic:i386/trusty-security 3.19.0-58.64~14.04.1 uptodate
linux-image-extra-3.19.0-58-generic:i386/trusty-security 3.19.0-58.64~14.04.1 uptodate
linux-image-generic-lts-vivid:i386/trusty-security 3.19.0.58.41 uptodate
linux-libc-dev:i386/trusty-security 3.13.0-85.129 uptodate
linux-sound-base:all/trusty 1.0.25+dfsg-0ubuntu4 uptodate
pptp-linux:i386/trusty 1.7.2-7 uptodate
syslinux:i386/trusty 3:4.05+dfsg-6+deb8u1 uptodate
syslinux-common:all/trusty 3:4.05+dfsg-6+deb8u1 uptodate
syslinux-legacy:i386/trusty 2:3.63+dfsg-2ubuntu5 uptodate
util-linux:i386/trusty-updates 2.20.1-5.1ubuntu20.7 uptodate
日志,64 位:
+ uname -a
Linux mypc 4.2.0-35-generic #40~14.04.1-Ubuntu SMP Fri Mar 18 16:37:35 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
+ cat /etc/issue
Ubuntu 14.04.4 LTS \n \l
+ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.4 LTS
Release: 14.04
Codename: trusty
+ apt-show-versions -r linux
libselinux1:amd64/trusty-updates 2.2.2-1ubuntu0.1 uptodate
libselinux1:i386/trusty-updates 2.2.2-1ubuntu0.1 uptodate
linux-firmware:all/trusty-security 1.127.20 uptodate
linux-generic-lts-wily:amd64/trusty-security 4.2.0.35.28 uptodate
linux-headers-4.2.0-35:all/trusty-security 4.2.0-35.40~14.04.1 uptodate
linux-headers-4.2.0-35-generic:amd64/trusty-security 4.2.0-35.40~14.04.1 uptodate
linux-headers-generic-lts-wily:amd64/trusty-security 4.2.0.35.28 uptodate
linux-image-4.2.0-35-generic:amd64/trusty-security 4.2.0-35.40~14.04.1 uptodate
linux-image-extra-4.2.0-35-generic:amd64/trusty-security 4.2.0-35.40~14.04.1 uptodate
linux-image-generic-lts-wily:amd64/trusty-security 4.2.0.35.28 uptodate
linux-libc-dev:amd64/trusty-security 3.13.0-85.129 uptodate
linux-signed-generic-lts-wily:amd64/trusty-security 4.2.0.35.28 uptodate
linux-signed-image-4.2.0-35-generic:amd64/trusty-security 4.2.0-35.40~14.04.1 uptodate
linux-signed-image-generic-lts-wily:amd64/trusty-security 4.2.0.35.28 uptodate
linux-sound-base:all/trusty 1.0.25+dfsg-0ubuntu4 uptodate
pptp-linux:amd64/trusty 1.7.2-7 uptodate
syslinux:amd64/trusty 3:4.05+dfsg-6+deb8u1 uptodate
syslinux-common:all/trusty 3:4.05+dfsg-6+deb8u1 uptodate
syslinux-legacy:amd64/trusty 2:3.63+dfsg-2ubuntu5 uptodate
util-linux:amd64/trusty-updates 2.20.1-5.1ubuntu20.7 uptodate
在 Ubuntu 14.04 上,我想ardour
从源代码重建包,并且我在 PPA 中找到了合适的版本,并且我已经激活了它的源(deb-src
在正确文件中某处的行/etc/apt/sources.list*
);我可以很好地从 PPA 安装包(但有一个需要重新编译的错误)。
此时,apt-cache
报告 PPA 中的版本:
$ apt-cache showpkg ardour
Package: ardour
Versions:
1:4.7.270+r15291.42~ubuntu14.04.1 (/var/lib/apt/lists/ppa.launchpad.net_dobey_audiotools_ubuntu_dists_trusty_main_binary-i386_Packages)
...
1:4.7.270+r15280.42~ubuntu14.04.1 (/var/lib/dpkg/status)
...
1:2.8.16+git20131003-1 (/var/lib/apt/lists/dk.archive.ubuntu.com_ubuntu_dists_trusty_universe_binary-i386_Packages)
...
Provides:
1:4.7.270+r15291.42~ubuntu14.04.1 -
1:4.7.270+r15280.42~ubuntu14.04.1 -
1:2.8.16+git20131003-1 -
Reverse Provides:
ardour-i686 1:2.8.16+git20131003-1
此外,如果我想下载源包,我得到了正确的:
$ apt-get source ardour
Reading package lists... Done
Building dependency tree
Reading state information... Done
Need to get 10.5 MB of source archives.
Get:1 http://ppa.launchpad.net/dobey/audiotools/ubuntu/ trusty/main ardour 1:4.7.270+r15291.42~ubuntu14.04.1 (tar) [10.5 MB]
...
到目前为止,一切都很好。但是,当我尝试通过 安装构建依赖项时build-dep
,我得到了这个:
$ sudo apt-get build-dep ardour
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages have unmet dependencies:
libjack-dev : Depends: libjack0 (= 1:0.121.3+20120418git75e3e20b-2.1ubuntu1) but it is not going to be installed
E: Build-dependencies for ardour could not be satisfied.
这是错误的 - 这是ardour
使用libjack2
- 如果我继续sudo apt-get install libjack0
,该操作将同时删除libjack2
and ardour
。
我已经看到man apt-get
我可以为 指定包的版本build-dep
,但不知何故它不起作用:
$ sudo apt-get build-dep ardour=4.7.270+r15291.42~ubuntu14.04.1
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Can not find version '4.7.270+r15291.42~ubuntu14.04.1' of package 'ardour'
E: Unable to find a source package for ardour
$ sudo apt-get build-dep ardour=4.7.270
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Can not find version '4.7.270' of package 'ardour'
E: Unable to find a source package for ardour
那么 - 我如何指定apt-get
我想要build-dep
这个特定的 PPA 版本?
我得到了其中一台默认安装了 64 位 Intel 处理器和 Windows 8 64 位的笔记本电脑。
首先,我想在这台机器上安装 32 位 Ubuntu 14.04。
我最终了解到我应该从 BIOS 中关闭 SecureBoot 以及 FastBoot (Is disabing Secure Boot required for Ubuntu 14.04 dual-boot with Windows 8 UEFI);然后我尝试使用 UEFI 启动 USB 拇指驱动器(我不记得它是否有效);最终启动了 live USB 14.04 32 位。
我首先尝试保留 Windows 恢复分区,并且只安装在主分区上,但在所有这些都失败之后,我擦除了磁盘并设置了一个新的分区表 - 我可以安装 Ubuntu 32 位。显然成功了-但是在那之后尝试从安装启动时,我会得到:
Reboot and select proper Boot Device
or Insert Boot Media in selected Boot device
干净的 Ubuntu 13.04 安装后的“重新启动并选择正确的启动设备”错误中也注意到了这一点- 在找到Ubuntu 的干净安装不会启动 [重新启动并选择正确的启动设备]之后,我注意到了这一点:
如果您的计算机有 EFI 或 UEFI 固件或预装了 Windows 8,则必须选择 Ubuntu 64 位版本。32 位版本将无法使用。
然后我用 Ubuntu 64 位替换了我的 USB 拇指驱动器上的 Ubuntu 32 位安装程序,最后都可以成功完成安装 - 并让这个安装的版本从系统的主分区启动。
到目前为止,一切都很好——但我想有时我可能需要一个 32 位系统来进行调试等。所以,由于我对 UEFI 之类的知识很差,我想问一下(在我浪费时间之前,在发现不可能之前):
假设我已经在这台计算机的主驱动器上安装了可运行的 64 位 UEFI,如果我决定:缩小 64 位分区以腾出空间,是否会变得更容易;然后为32位系统新建一个分区;最后,从这个分区上的 USB 拇指驱动器安装 Ubuntu 32 位?
我在https://help.ubuntu.com/community/UEFI中看到:
使用 Ubuntu 的 64 位磁盘。(Ubuntu32bit 不能在 UEFI 模式下轻松安装。如果 32 位 UEFI 是您的计算机可以启动的唯一方式,例如,如果您有一台基于 Intel Atom 的现代笔记本电脑,那么这是一个问题。在这种情况下,您将需要一个复杂的工作 -大约。)
...但是,我不确定这些说明是否仅适用于在系统上首次安装 Ubuntu(或者可能与 Windows 并排安装)。
我有点希望在我的情况下,我想要一个 64 位和一个 32 位的 Ubuntu(而不是 Windows)会更容易:我的理由是已经成功安装了 64 位,安装过程已经适当地设置了引导分区、“可引导”标签等 - 然后,当安装 32 位版本时,它会检测机器上的 Grub,它会简单地将自己添加为条目,而不是尝试从头开始安装引导加载程序(即使安装程序总是明确询问应该在哪个设备上安装引导加载程序,这让我担心 32 位安装过程可能会覆盖正确的 64 位引导加载程序,从而造成混乱东西)。
所以 - 以前有没有人尝试过这个,并且在这种情况下可以期待一个更简单(即简单)的安装过程;或者如果之后尝试并排安装 32 位安装,是否应该预期正在工作的 64 位安装损坏?
是否有适用于 Ubuntu 的开箱即用的 VRML2 (VRML97) 查看器?我听说过 g3dviewer
(不支持 VRML2),也听说过freeWRL
,whitedune
和VRMLViewer - 但我找不到这些的任何 .debs,而且似乎从源代码构建它们相当复杂。
blender
可以导入这些文件 - 但我想要一个快速查看器;如果我有一个包含 4-5 个 wrl 文件的目录,我必须将每个文件导入搅拌机,然后从搅拌机中删除所有内容,以便加载并显示下一个文件。
有什么建议么?
我想这个问题与如何配置 dbus 以允许 ssh-user 暂停服务器几乎相同?; 除了我想更好地制定它。
假设我有一个不间断运行的 Ubuntu 服务器,我们称之为MyServer
. 那么,假设我在同一本地网络上有另一台 PC MyServer
,我们称之为MyLocalPC
。
MyLocalPC
wakeonlan
然后保持挂起,除非它通过by打开MyServer
。该过程的这一部分对我来说非常有效:我可以通过ssh
to登录MyServer
,在MyServer
ssh 提示符上我可以发出wakeonlan
,然后MyLocalPC
醒来 - 太好了。
但是,一旦我完成了与 的合作MyLocalPC
,我想再次将其置于暂停状态。问题如下 - 如果我MyLocalPC
首先通过ssh 进入,我可以轻松地将机器挂起ssh
:
[MyServer]$ ssh MyLocalPC
[MyLocalPC]$ dbus-send --session --dest=org.freedesktop.PowerManagement --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/PowerManagement org.freedesktop.PowerManagement.Suspend
这将暂停MyLocalPC
- 但也会正确阻止退出ssh
,并最终冻结。我试图变得棘手并发出这样的问题:ssh
MyServer
[MyServer]$ ssh MyLocalPC "dbus-send --session --dest=org.freedesktop.PowerManagement --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/PowerManagement org.freedesktop.PowerManagement.Suspend"
Failed to open connection to "session" message bus: /bin/dbus-launch terminated abnormally with the following error: Autolaunch error: X11 initialization failed.
然后我读到DISPLAY
了应该定义变量的地方——但这也失败了:
[MyServer]$ ssh MyLocalPC "DISPLAY=:0 dbus-send --session --dest=org.freedesktop.PowerManagement --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/PowerManagement org.freedesktop.PowerManagement.Suspend"
Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.PowerManagement was not provided by any .service files
那么有谁知道我如何在MyLocalPC
没有与冻结ssh
连接的情况下发出暂停MyServer
?
我想这是一个与Can I use GNOME applet in Unity 相关的问题?(由@Jorge Castro的建议感动)
我想stickynotes_applet
在 Unity 中使用。现在在 Gnome 中,这个小程序被添加到一个栏,然后我必须单击它来创建一个新笔记,我可以调用首选项以将笔记粘贴在桌面上 - 这是我所需要的。
显然,正如这里提到的,在 Unity 中直接使用这个小程序是不可能的;但基本上,我需要做的就是打开“首选项”窗口(以便使笔记粘住),并以某种方式发出新笔记的命令(否则将通过单击小程序图标来执行)侏儒酒吧)。
我已经尝试运行' /usr/lib/gnome-applets/stickynotes_applet
'并且似乎它运行了,虽然没有显示小程序图标(这是预期的),也没有任何其他窗口(否则我希望会显示:))。
所以我在徘徊 - 鉴于这个小程序(似乎)没有任何与桌面相关的特殊内容 - 是否有命令行方式来基本上运行这个小程序,向它发出“显示首选项”命令,并发出新的注释在 Unity 环境中对它发出命令(目前我可以tomboy
从命令行调用它并且它可以工作 - 但它的窗口对于我的口味来说太笨重了)?
(还有一个额外的问题——你将如何仅从经典 Gnome 中的命令行启动一个与小程序相关的窗口?)
桌面集成对我来说并不重要 - 我很乐意从命令行手动运行它,只要我得到留在桌面上的小型紧凑笔记(只要进程处于活动状态)..
感谢您的任何评论,
干杯!
好吧 - 只是因为我在网上其他任何地方都找不到这个问题 - 是否有类似 Unity 界面的“磁盘安装器”小程序之类的东西,或者有其他选择吗?
(我所说的“替代品”是指:我不介意双击一个图标,并将曾经是工具栏小程序的东西作为一个单独的窗口启动;只要不必处理mount
命令行、文件系统参数和这样的。)