3rd-party apt-key list for Ubuntu

Google Chrome

wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
sudo apt-get update
sudo apt-get install google-chrome-stable

JDK 1.7

echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" | tee -a /etc/apt/sources.list
echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" | tee -a /etc/apt/sources.list
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
apt-get update
apt-get install oracle-java7-installer

NodeJS

sudo add-apt-repository ppa:chris-lea/node.js 

MongoDB

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list

可自动安装依赖的Ubuntu离线包安装工具 gdebi

可自动安装依赖的Ubuntu离线包安装工具 gdebi

Ubuntu下,通用的在线包管理工具是apt,但是对于下载好的离线deb包,我们通常会用dpkg -i xxx.dev来安装,但是这样常常会遇到依赖包不存在而无法安装的错误。dpkg不会为我们自动解决包依赖的问题,也不会自动下载安装所依赖的包。 gdebi是一个类似的管理工具,但是会自动下载安装依赖。

对于一个离线包,只需要使用下面的命令即可自动下载安装,包括所有依赖包

    gdebi package_name.deb

可以使用下面这条命令安装这个工具

    sudo apt-get install gdebi

better-package-tool-gdebi

解决搜狗输入法Ubuntu 14.04下黑块状态条

搜狗的Linux输入法正式版发布之时,恰好Ubuntu 14.04 LTS也刚刚发布正式版。尝试安装搜狗的Linux输入法之后,出现了一个小小的问题:输入法状态条是一个黑色块。

我的Linux桌面用的是i3平铺式桌面管理器,多显示器环境下非常好用,强烈推荐。除此之外,GUI底层用的是KDE。

做了一番功课之后,结果发现因为搜狗要支持皮肤,所以那个状态条是半透明状态的。而我目前的默认环境下不支持compositor窗口管理器,无法处理半透明窗口的效果,于是就只能显示一个黑色块。

解决办法是安装Compton,以支持窗口的半透明效果。Ubuntu默认情况下没有可用的APT源,有两种办法安装:一个是从源码编译(不赘述),另外一个是使用一个第三方的源。

安装第三方源并安装compton

sudo apt-add-repository ppa:richardgv/compton 
sudo apt-get update && sudo apt-get install compton

配置compton

编辑文件 ~/.compton.conf,输入如下内容

backend = "glx";
paint-on-overlay = true;
glx-no-stencil = true;
glx-no-rebind-pixmap = true;
vsync = "opengl-swc"; 

# These are important. The first one enables the opengl backend. The last one
# is the vsync method. Depending on the driver you might need to use a
# different method.
# The other options are smaller performance tweaks that work well in most
# cases. 
# You can find the rest of the options here:
# https://github.com/chjj/compton/wiki/perf-guide, and here:
# https://github.com/chjj/compton/wiki/vsync-guide


# Shadow
shadow = false;          # Enabled client-side shadows on windows.
no-dock-shadow = true;      # Avoid drawing shadows on dock/panel windows.
no-dnd-shadow = true;       # Don't draw shadows on DND windows.
clear-shadow = true;        # Zero the part of the shadow's mask behind the window (experimental).
shadow-radius = 7;      # The blur radius for shadows. (default 12)
shadow-offset-x = -7;       # The left offset for shadows. (default -15)
shadow-offset-y = -7;       # The top offset for shadows. (default -15)
shadow-exclude = [
    "! name~=''",
    "n:e:Notification",
    "n:e:Plank",
    "n:e:Docky",                                                                                                                                                                                                 
    "g:e:Synapse",                                                                                                                                                                                               
    "g:e:Kupfer",                                                                                                                                                                                                
    "g:e:Conky",                                                                                                                                                                                                 
    "n:w:*Firefox*",                                                                                                                                                                                             
    "n:w:*Chrome*",                                                                                                                                                                                              
    "n:w:*Chromium*",                                                                                                                                                                                            
    "class_g ?= 'Notify-osd'",                                                                                                                                                                                   
    "class_g ?= 'Cairo-dock'",                                                                                                                                                                                   
    "class_g ?= 'Xfce4-notifyd'",                                                                                                                                                                                
    "class_g ?= 'Xfce4-power-manager'"                                                                                                                                                                           
];                                                                                                                                                                                                            

# The shadow exclude options are helpful if you have shadows enabled. Due to                                                                                                                                  
# the way compton draws its shadows, certain applications will have visual                                                                                                                                    
# glitches                                                                                                                                                                                                    
# (most applications are fine, only apps that do weird things with xshapes or                                                                                                                                 
# argb are affected).                                                                                                                                                                                         
# This list includes all the affected apps I found in my testing. The "!                                                                                                                                      
# name~=''" part excludes shadows on any "Unknown" windows, this prevents a                                                                                                                                   
# visual glitch with the XFWM alt tab switcher.                                                                                                                                                               

# Fading
fading = true; # Fade windows during opacity changes.
fade-delta = 4; # The time between steps in a fade in milliseconds. (default 10).
fade-in-step = 0.03; # Opacity change between steps while fading in. (default 0.028).
fade-out-step = 0.03; # Opacity change between steps while fading out. (default 0.03).
#no-fading-openclose = true; # Fade windows in/out when opening/closing

detect-client-opacity = true; # This prevents opacity being ignored for some apps. For example without this enabled my xfce4-notifyd is 100% opacity no matter what.

# Window type settings
wintypes:
{
  tooltip = { fade = true; shadow = false; };
};

重点是其中 shadow 一项的值设置为 false 。

自启动

最后,修改i3配置文件 ~/.i3/config,在最后加入下面的代码,实现自动启动compton和搜狗输入法

# auto start commands
exec --no-startup-id fcitx -r
exec --no-startup-id fcitx-qimpanel
exec --no-startup-id compton -b

安装完成了,系统也顺便带了半透明和淡入淡出效果。

Setup Ghost blog system on Ubuntu

Installation

Make sure you have install all required package

sudo apt-get install npm nodejs

Goto https://ghost.org/download/ , download the latest zip file

$ wget https://ghost.org/zip/ghost-0.4.2.zip
$ unzip ../ghost-0.4.2.zip -d ghost
$ cd ghost
$ npm install --production
...
$ npm start

> ghost@0.4.2 start /home/simon/downloads/ghost
> node index

Ghost is running in development... 
Listening on 127.0.0.1:2368 
Url configured as: http://my-ghost-blog.com 
Ctrl+C to shut down

Now you can browse your own Ghost blog at http://127.0.0.1:2368

It's very possible that you got the below error when you run npm install --production

> sqlite3@2.2.0 install /home/simon/downloads/ghost/node_modules/sqlite3                                         
> node-pre-gyp install --fallback-to-build                                                                       

/usr/bin/env: node: No such file or directory                                                                    
npm WARN This failure might be due to the use of legacy binary "node"                                            
npm WARN For further explanations, please read                                                                   
/usr/share/doc/nodejs/README.Debian                                                                              

npm ERR! sqlite3@2.2.0 install: `node-pre-gyp install --fallback-to-build`                                       
npm ERR! `sh "-c" "node-pre-gyp install --fallback-to-build"` failed with 127                                    
npm ERR!                                                                                                         
npm ERR! Failed at the sqlite3@2.2.0 install script.                                                             
npm ERR! This is most likely a problem with the sqlite3 package,                                                 
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-pre-gyp install --fallback-to-build
npm ERR! You can get their info via:
npm ERR!     npm owner ls sqlite3
npm ERR! There is likely additional logging output above.

npm ERR! System Linux 3.11.0-13-generic
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install" "--production"
npm ERR! cwd /home/simon/downloads/ghost
npm ERR! node -v v0.10.15
npm ERR! npm -v 1.2.18
npm ERR! code ELIFECYCLE
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/simon/downloads/ghost/npm-debug.log
npm ERR! not ok code 0

This error is caused by the wrong node command symblic link in your system. To fix this, run the following command, then run npm install --production again.

sudo update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10

It should work now.

Configuration

After start the Ghost successfully, you need to go to administration page to configure your Blog or write a new post.

First, go to http://127.0.0.1:2368/ghost/. It will redirect to sign up page.

Then, type your inforamtion and 'Sign Up', you will be redirect to the administration page.

LD_LIBRARY_PATH shouldn't contain the current directory

I am trying to build a self-contain GLIBC 2.7. It shows following error when I run configure

checking whether ranlib is necessary... no
checking LD_LIBRARY_PATH variable... contains current directory
configure: error:
*** LD_LIBRARY_PATH shouldn't contain the current directory when
*** building glibc. Please change the environment variable
*** and run configure again.

my LD_LIBRARY_PATH is

$ echo $LD_LIBRARY_PATH
/home/sliu/opt/lib:/home/sliu/opt/libexec/gcc/x86_64-unknown-linux-gnu/4.8.1:/home/sliu/opt/lib64:/home/sliu/opt/lib64/gcj-4.8.1-14:

The error message complains that LD_LIBRARY_PATH contain the current directory. However my LD_LIBRARY_PATH doesn't contain any "current directory". Actually, it's caused by the path seperate character ":" instead of "current directory". If you search LD_LIBRARY_PATH in configure, you will find this comments

# Test if LD_LIBRARY_PATH contains the notation for the current directory
# since this would lead to problems installing/building glibc.
# LD_LIBRARY_PATH contains the current directory if one of the following
# is true:
# - one of the terminals (":" and ";") is the first or last sign
# - two terminals occur directly after each other
# - the path contains an element with a dot in it

Which means, The LD_LIBRARY_PATH can not start or end with character ":".

So this issue can be fixed by removing the last ':' character in LD_LIBRARY_PATH.

解决办法就是,去掉 LD_LIBRARY_PATH 最后的那个路径分隔符':'.

ibus-pinyin doesn't work in KUbuntu 13.10

ibus and ibus-pinyin doesn't work in KUbuntu 13.10. It looks like this

$ ibus-setup 
ERROR:root:Could not find any typelib for Gtk
Traceback (most recent call last):
  File "/usr/share/ibus/setup/main.py", line 29, in <module>
    from gi.repository import Gtk
ImportError: cannot import name Gtk

The problem is a dependency package is missing. This problem can be solved by this command: sudo apt-get install gir1.2-gtk-3.0.

phpMyAdmin login error to remote server

I have a fresh install of Ubuntu 13.10 and phpMyAdmin version 4:4.0.6-1 . I add a remote server in config.inc.php for multiple server management. But phpMyAdmin failed to login to remote server.

there are following error logs in /var/log/apache2/error.log

PHP Fatal error:  Call to a member function getPresence() on a non-object in /usr/share/phpmyadmin/libraries/navigation/NavigationTree.class.php on line 1046

The code of NavigationTree.class.php at 1046 are

1039         } else if (($node->type == Node::CONTAINER                              
1040             && (   $node->real_name == 'tables'                                 
1041                 || $node->real_name == 'views'                                  
1042                 || $node->real_name == 'functions'                              
1043                 || $node->real_name == 'procedures'                             
1044                 || $node->real_name == 'events')                                
1045             )                                                                   
1046             && $node->realParent()->getPresence($node->real_name) >= (int)$GLOBALS['cfg']    ['NavigationTreeDisplayItemFilterMinimum']
1047         ) {

I am not sure the root cause of this issue. But I can fix this error by adding a check for if statment

1039         } else if (($node->type == Node::CONTAINER                              
1040             && (   $node->realParent )                                          
1041             && (   $node->real_name == 'tables'                                 
1042                 || $node->real_name == 'views'                                  
1043                 || $node->real_name == 'functions'                              
1044                 || $node->real_name == 'procedures'                             
1045                 || $node->real_name == 'events')                                
1046             )                                                                   
1047             && $node->realParent()->getPresence($node->real_name) >= (int)$GLOBALS['cfg']['NavigationTreeDisplayItemFilterMinimum']
1048         ) {

That's it.